5 import ("bufio"; "fmt"; "os")
10 up, down, right *wordnode
13 func print_chain(node *wordnode) {
14 if node.right == nil {
15 fmt.Printf("%s", *node.word)
18 print_chain(node.down)
23 fmt.Printf("%s", *node.word)
26 print_chain(node.down)
29 if node == nil { break }
37 words := make(map[string] *wordnode)
39 scanner := bufio.NewScanner(os.Stdin)
41 word := scanner.Text()
42 words[word] = &wordnode { &word, 1, nil, nil, nil }
46 for word, node := range words {
48 if wlen <= 1 { continue }
49 parent := words[word[:wlen - 1]]
56 } else if nlen > plen {
59 if nlen > max { max = nlen }
61 if parent.down != node {
62 node.right = parent.down; parent.down = node
64 node = parent; parent = node.up
68 for _, node := range words {
69 if node.len == max { print_chain(node); fmt.Printf("\n") }