6 __slots__ = ["word", "len", "up", "down", "right"];
7 def __init__(me, word):
10 me.up = me.down = me.right = None
14 for line in SYS.stdin:
15 line = line.rstrip("\n")
16 WORDS[line] = Node(line)
19 for node in WORDS.values():
20 word = node.word; wlen = len(word)
21 if wlen <= 1: parent = None
22 else: parent = WORDS.get(word[:wlen -1])
23 node.up = parent; nlen = node.len
24 while parent is not None:
25 plen = parent.len; nlen += 1
29 node.right = parent.down; parent.down = node
32 parent.down = node; node.right = None
34 node = parent; parent = node.up
35 if nlen > MAX: MAX = nlen
37 def print_chain(node):
38 if node.right is None:
39 SYS.stdout.write(node.word)
41 SYS.stdout.write(" "); print_chain(node.down)
43 SYS.stdout.write("{ ")
45 SYS.stdout.write(node.word)
47 SYS.stdout.write(" "); print_chain(node.down)
49 if node is None: break
50 SYS.stdout.write(" | ")
51 SYS.stdout.write(" }")
53 for node in WORDS.values():
54 if node.len == MAX: print_chain(node); SYS.stdout.write("\n")