For problem statement at 0-999/900-999/990-999/995/problemF.txt this is a correct solution, but verifier at 0-999/900-999/990-999/995/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 1000000007
func power(base, exp int64) int64 {
res := int64(1)
base %= MOD
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}
func modInverse(n int64) int64 {
return power(n, MOD-2)
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n, D int
if _, err := fmt.Fscan(reader, &n, &D); err != nil {
return
}
p := make([]int, n+1)
for i := 2; i <= n; i++ {
fmt.Fscan(reader, &p[i])
}
k := n + 1
f := make([]int64, n+1)
y := make([]int64, k+1)
dp := make([]int64, n+1)
for x := 1; x <= k; x++ {
for i := 1; i <= n; i++ {
dp[i] = 1
}
for u := n; u >= 2; u-- {
f[u] = (f[u] + dp[u])
if f[u] >= MOD {
f[u] -= MOD
}
pu := p[u]
dp[pu] = (dp[pu] * f[u]) % MOD
}
f[1] = (f[1] + dp[1])
if f[1] >= MOD {
f[1] -= MOD
}
y[x] = f[1]
}
if D <= k {
fmt.Println(y[D])
return
}
dVal := int64(D) % MOD
pref := make([]int64, k+2)
suff := make([]int64, k+2)
pref[0] = 1
for i := 1; i <= k; i++ {
val := (dVal - int64(i)) % MOD
if val < 0 {
val += MOD
}
pref[i] = (pref[i-1] * val) % MOD
}
suff[k+1] = 1
for i := k; i >= 1; i-- {
val := (dVal - int64(i)) % MOD
if val < 0 {
val += MOD
}
suff[i] = (suff[i+1] * val) % MOD
}
fact := make([]int64, k+1)
fact[0] = 1
for i := 1; i <= k; i++ {
fact[i] = (fact[i-1] * int64(i)) % MOD
}
ans := int64(0)
for i := 1; i <= k; i++ {
num := (pref[i-1] * suff[i+1]) % MOD
den := (fact[i-1] * fact[k-i]) % MOD
if (k-i)%2 == 1 {
den = (MOD - den) % MOD
}
term := (y[i] * num) % MOD
term = (term * modInverse(den)) % MOD
ans = (ans + term) % MOD
}
fmt.Println(ans)
}