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: continue
22 parent = WORDS.get(word[:wlen - 1])
23 if not parent: continue
24 node.up = parent; nlen = node.len
28 if nlen > MAX: MAX = nlen; WINNERS = []
31 plen = parent.len; nlen += 1
35 node.right = parent.down; parent.down = node
38 parent.down = node; node.right = None
40 node = parent; parent = node.up
41 if nlen > MAX: MAX = nlen
43 def print_chain(node):
44 if node.right is None:
45 SYS.stdout.write(node.word)
47 SYS.stdout.write(" "); print_chain(node.down)
49 SYS.stdout.write("{ ")
51 SYS.stdout.write(node.word)
53 SYS.stdout.write(" "); print_chain(node.down)
55 if node is None: break
56 SYS.stdout.write(" | ")
57 SYS.stdout.write(" }")
59 for node in WINNERS: print_chain(node); SYS.stdout.write("\n")