For problem statement at 0-999/500-599/540-549/543/problemD.txt this is a correct solution, but verifier at 0-999/500-599/540-549/543/verifierD.go ends with All tests passed! can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
fmt.Fscan(reader, &n)
adj := make([][]int, n+1)
for i := 2; i <= n; i++ {
var p int
fmt.Fscan(reader, &p)
adj[p] = append(adj[p], i)
adj[i] = append(adj[i], p)
}
dp := make([]int64, n+1)
var dfs1 func(u, p int)
dfs1 = func(u, p int) {
dp[u] = 1
for _, v := range adj[u] {
if v != p {
dfs1(v, u)
dp[u] = (dp[u] * (dp[v] + 1)) % 1000000007
}
}
}
dfs1(1, 0)
ans := make([]int64, n+1)
var dfs2 func(u, p int, upVal int64)
dfs2 = func(u, p int, upVal int64) {
var children []int
for _, v := range adj[u] {
if v != p {
children = append(children, v)
}
}
m := len(children)
pref := make([]int64, m)
suff := make([]int64, m)
for i := 0; i < m; i++ {
v := children[i]
val := (dp[v] + 1) % 1000000007
if i == 0 {
pref[i] = val
} else {
pref[i] = (pref[i-1] * val) % 1000000007
}
}
for i := m - 1; i >= 0; i-- {
v := children[i]
val := (dp[v] + 1) % 1000000007
if i == m-1 {
suff[i] = val
} else {
suff[i] = (suff[i+1] * val) % 1000000007
}
}
ans[u] = (upVal + 1) % 1000000007
if m > 0 {
ans[u] = (ans[u] * pref[m-1]) % 1000000007
}
for i := 0; i < m; i++ {
v := children[i]
val := (upVal + 1) % 1000000007
if i > 0 {
val = (val * pref[i-1]) % 1000000007
}
if i < m - 1 {
val = (val * suff[i+1]) % 1000000007
}
dfs2(v, u, val)
}
}
dfs2(1, 0, 0)
for i := 1; i <= n; i++ {
if i > 1 {
fmt.Fprint(writer, " ")
}
fmt.Fprint(writer, ans[i])
}
fmt.Fprintln(writer)
}