#!/usr/bin/env python3

import sys
import getopt
import re

matching = {'<': '>', '(': ')'}


def find_matching(block):
	o = block[0]
	c = matching[block[0]]
	i = 1
	d = 1
	while d != 0:
		if block[i] == o:
			d = d + 1
		elif block[i] == c:
			d = d - 1
		i = i + 1

	return i


def help(argv):
	cmd=argv[0]
	print(f"{cmd} [-h] [-l <limit>] [-f <filter>]...")


def cli(argv):
	filters = []
	limit = 64
	substs  = {
			'std::mersenne_twister_engine<[^>]*>': 'RNG',
			}
	try:
		opts, args = getopt.getopt(argv[1:], "hf:l:", ["limit=", "filter="])
	except getopt.GetoptError:
		help(argv)
		sys.exit(2)
	for opt, arg in opts:
		if opt == '-h':
			help(argv)
			sys.exit()
		elif opt in ("-f", "--filter"):
			filters.append(arg)
		elif opt in ("-l", "--limit"):
			limit = int(arg)

	return [filters, limit, substs]


def process(limit, line, d = 0):
	i = 0
	print("  "*d, end='')
	while i < len(line):
		c = line[i]
		if c == '(':
			trail = line[i:]
			e = find_matching(trail)
			print(trail[:e], end='')
			i = i + e - 1
		elif c == '<':
			trail = line[i:]
			e = find_matching(trail)
			if e > limit:
				print("<")
				process(limit, trail[1:e-1], d+1)
				print("\n"+"  "*d+">", end='')
			else:
				print(trail[:e], end='')
			i = i + e - 1
		elif c == ',':
			print(c)
			print("  "*d, end='')
		elif c != ' ':
			print(c, end='')

		i = i + 1


def applyReplaces(line, substs):
	for fr, to in substs.items():
		line = re.sub(fr, to, line)

	return line


[filters, limit, substs] = cli(sys.argv)
lines = sys.stdin.readlines()
lines = [item.rstrip() for item in lines if item != "\n"]
data = "".join(lines)
data = applyReplaces(data, substs)

for f in filters:
	data = data.replace(f, "")

process(limit, data)
print()
