For problem statement at 0-999/600-699/690-699/690/problemC3.txt this is a correct solution, but verifier at 0-999/600-699/690-699/690/verifierC3.go ends with All 127 tests passed can you fix the verifier? package main
import (
"bufio"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buffer := make([]byte, 1024*1024)
scanner.Buffer(buffer, 1024*1024)
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
up := make([][19]int, n+1)
depth := make([]int, n+1)
getLCA := func(a, b int) int {
if depth[a] < depth[b] {
a, b = b, a
}
diff := depth[a] - depth[b]
for i := 0; diff > 0; i++ {
if (diff & 1) != 0 {
a = up[a][i]
}
diff >>= 1
}
if a == b {
return a
}
for i := 18; i >= 0; i-- {
if up[a][i] != up[b][i] {
a = up[a][i]
b = up[b][i]
}
}
return up[a][0]
}
dist := func(a, b int) int {
return depth[a] + depth[b] - 2*depth[getLCA(a, b)]
}
u, v := 1, 1
D := 0
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for k := 2; k <= n; k++ {
scanner.Scan()
p, _ := strconv.Atoi(scanner.Text())
depth[k] = depth[p] + 1
up[k][0] = p
for j := 1; j < 19; j++ {
up[k][j] = up[up[k][j-1]][j-1]
}
du := dist(k, u)
dv := dist(k, v)
if du > D {
v = k
D = du
} else if dv > D {
u = k
D = dv
}
if k > 2 {
out.WriteByte(' ')
}
out.WriteString(strconv.Itoa(D))
}
out.WriteByte('\n')
}