package main import ( "fmt" "bufio" "strconv" "strings" "os" ) func main() { var n int var tree *node scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { text := scanner.Text() if n == 0 { n, _ = strconv.Atoi(text) continue } for _, s := range strings.Fields(text) { if v, err := strconv.Atoi(s); err == nil { tree = insert(tree, &node{value:v}) } } } fmt.Println(height(tree, 0)) } type node struct{ value int left *node right *node } func insert(root, n *node) *node { if root == nil { return n } if n.value < root.value { root.left = insert(root.left, n) return root } root.right = insert(root.right, n) return root } func height(root *node, currentHeight int) int { if root == nil { return -1 } maxHeight := currentHeight if root.left != nil { if nh := height(root.left, currentHeight+1); nh > maxHeight { maxHeight = nh } } if root.right != nil { if nh := height(root.right, currentHeight+1); nh > maxHeight { maxHeight = nh } } return maxHeight }