code: def formatFlow(s):
      result = ""
      shifts = []
      pos = 0
      nextIsList = False
      def IsNextList(index, maxIndex, buf):
          if index == maxIndex:
              return False
          if buf[index + 1] == '<':
              return True
          if index < maxIndex - 1:
              if buf[index + 1] == '\n' and buf[index + 2] == '<':
                  return True
          return False
      maxIndex = len(s) - 1
      for index in range(len(s)):
          sym = s[index]
          if sym == "\n":
              lastShift = shifts[-1]
              result += sym + lastShift * " "
              pos = lastShift
              if index < maxIndex:
                  if s[index + 1] not in "<>":
                      result += " "
                      pos += 1
              continue
          if sym == "<":
              if nextIsList == False:
                  shifts.append(pos)
              else:
                  nextIsList = False
              pos += 1
              result += sym
              continue
          if sym == ">":
              shift = shifts[-1]
              result += '\n'
              result += shift * " "
              pos = shift
              result += sym
              pos += 1
              if IsNextList(index, maxIndex, s):
                  nextIsList = True
              else:
                  del shifts[-1]
                  nextIsList = False
              continue
          result += sym
          pos += 1
      return result