For problem statement at 1000-1999/1100-1199/1140-1149/1146/problemF.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1140-1149/1146/verifierF.go ends with case 1: expected 3 got 5
input:
5
1 2 1 2
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
children := make([][]int, n+1)
for i := 2; i <= n; i++ {
var p int
fmt.Fscan(in, &p)
children[p] = append(children[p], i)
}
const MOD int64 = 998244353
dp := make([][2]int64, n+1)
pref := make([]int64, n+1)
suff := make([]int64, n+1)
for i := n; i >= 1; i-- {
k := len(children[i])
if k == 0 {
dp[i][0] = 1
dp[i][1] = 1
} else {
var P int64 = 1
for j := 0; j < k; j++ {
v := children[i][j]
sum := (dp[v][0] + dp[v][1]) % MOD
P = (P * sum) % MOD
}
for j := 0; j < k; j++ {
v := children[i][j]
if j == 0 {
pref[j] = dp[v][0]
} else {
pref[j] = (pref[j-1] * dp[v][0]) % MOD
}
}
for j := k - 1; j >= 0; j-- {
v := children[i][j]
if j == k-1 {
suff[j] = dp[v][0]
} else {
suff[j] = (suff[j+1] * dp[v][0]) % MOD
}
}
var S int64 = 0
for j := 0; j < k; j++ {
v := children[i][j]
prod := dp[v][1]
if j > 0 {
prod = (prod * pref[j-1]) % MOD
}
if j < k-1 {
prod = (prod * suff[j+1]) % MOD
}
S = (S + prod) % MOD
}
var Z int64 = 1
if k > 0 {
Z = pref[k-1]
}
dp[i][0] = (P - S + MOD) % MOD
dp[i][1] = (P - Z + MOD) % MOD
}
}
fmt.Println(dp[1][0])
}