from types import *

indent = 2

def isseq(seq):
    return type(seq) in [TupleType, ListType, DictType]

def seqpp(seq, level=0):
    if type(seq) is TupleType:
        pp = "(\n"
        for i in range(len(seq)):
            pp = pp + " " * (indent * (level + 1))
            if isseq(seq[i]):
                pp = pp + seqpp(seq[i], level + 1)
            elif type(seq[i]) is StringType:
                pp = pp + '"' + seq[i] + '"'
            else:
                pp = pp + str(seq[i])
            if (i + 1) < len(seq):
                pp = pp + ","
            pp = pp + "\n"
        pp = pp + " " * (indent * level) + ")"
    if type(seq) is ListType:
        pp = "[\n"
        for i in range(len(seq)):
            pp = pp + " " * (indent * (level + 1))
            if isseq(seq[i]):
                pp = pp + seqpp(seq[i], level + 1)
            elif type(seq[i]) is StringType:
                pp = pp + '"' + seq[i] + '"'
            else:
                pp = pp + str(seq[i])
            if (i + 1) < len(seq):
                pp = pp + ","
            pp = pp + "\n"
        pp = pp + " " * (indent * level) + "]"
    if type(seq) is DictType:
        pp = "{\n"
        items = seq.items()
        for i in range(len(items)):
            if type(items[i][0]) is StringType:
                key = '"' + items[i][0] + '"'
            else:
                key = str(items[i][0])
            pp = pp + " " * (indent * (level + 1)) + key + ": "
            if isseq(items[i]):
                pp = pp + seqpp(items[i][1], level + 1)
            elif type(items[i][1]) is StringType:
                pp = pp + '"' + items[i][1] + '"'
            else:
                pp = pp + str(items[i][1])
            if (i + 1) < len(items):
                pp = pp + ","
            pp = pp + "\n"
        pp = pp + " " * (indent * level) + "}"
    return pp
