#! /usr/bin/python3 import sys as SYS class Node (object): __slots__ = ["word", "len", "up", "down", "right"]; def __init__(me, word): me.word = word me.len = 1 me.up = me.down = me.right = None WORDS = dict() for line in SYS.stdin: line = line.rstrip("\n") WORDS[line] = Node(line) MAX = 0 for node in WORDS.values(): word = node.word; wlen = len(word) if wlen <= 1: parent = None else: parent = WORDS.get(word[:wlen -1]) node.up = parent; nlen = node.len while parent is not None: plen = parent.len; nlen += 1 if plen > nlen: break elif plen == nlen: node.right = parent.down; parent.down = node break else: parent.down = node; node.right = None parent.len = nlen node = parent; parent = node.up if nlen > MAX: MAX = nlen def print_chain(node): if node.right is None: SYS.stdout.write(node.word) if node.down: SYS.stdout.write(" "); print_chain(node.down) else: SYS.stdout.write("{ ") while True: SYS.stdout.write(node.word) if node.down: SYS.stdout.write(" "); print_chain(node.down) node = node.right if node is None: break SYS.stdout.write(" | ") SYS.stdout.write(" }") for node in WORDS.values(): if node.len == MAX: print_chain(node); SYS.stdout.write("\n")