For problem statement at 2000-2999/2100-2199/2150-2159/2159/problemC.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2150-2159/2159/verifierC.go ends with deterministic case 1 failed: expected "1\n1\n3\n2\n0\n3" got "2\n1\n4\n2\n0\n2"
input:
6
1
-1 -1
2
-1 2 -1
2
-1 -1 -1
3
-1 -1 3 -1
3
-1 2 3 -1
5
-1 -1 -1 1 0 -1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for tc := 0; tc < t; tc++ {
var n int
fmt.Fscan(reader, &n)
A := make([]int, n+1)
for i := 0; i <= n; i++ {
fmt.Fscan(reader, &A[i])
}
S_req := make([]int, 0)
sumSReq := 0
M := make(map[int]bool)
possible := true
for i := 1; i <= n; i++ {
if A[i] == 0 {
S_req = append(S_req, i)
sumSReq += i
} else if A[i] > 0 {
j := A[i]
if A[j] != -1 && A[j] != i {
possible = false
}
M[i] = true
M[j] = true
}
}
if !possible {
fmt.Fprintln(writer, 0)
continue
}
for _, i := range S_req {
if M[i] {
possible = false
}
}
if !possible {
fmt.Fprintln(writer, 0)
continue
}
MaxV := n - sumSReq
if MaxV < 0 {
fmt.Fprintln(writer, 0)
continue
}
Free := make([]int, 0)
for i := 1; i <= n; i++ {
if A[i] != 0 && !M[i] {
Free = append(Free, i)
}
}
B := make([]int, 0)
for i := 1; i <= n; i++ {
if A[i] == 0 || M[i] {
B = append(B, i)
}
}
K := 0
for K*K <= 2*MaxV {
K++
}
if K > len(Free) {
K = len(Free)
}
dp := make([][]int, K+1)
for i := 0; i <= K; i++ {
dp[i] = make([]int, MaxV+1)
}
dp[0][0] = 1
MOD := 1000000007
if len(Free) <= len(B) {
for _, u := range Free {
if u > MaxV {
continue
}
for i := K; i >= 1; i-- {
for j := MaxV; j >= u; j-- {
dp[i][j] = (dp[i][j] + dp[i-1][j-u]) % MOD
}
}
}
} else {
for i := 1; i <= K; i++ {
for j := i; j <= MaxV; j++ {
dp[i][j] = (dp[i][j-i] + dp[i-1][j-i]) % MOD
}
}
for _, u := range B {
if u > MaxV {
continue
}
for i := 1; i <= K; i++ {
for j := u; j <= MaxV; j++ {
dp[i][j] = (dp[i][j] - dp[i-1][j-u] + MOD) % MOD
}
}
}
}
invs := make([]int, n+1)
invs[0] = 1
if n >= 1 {
invs[1] = 1
}
for i := 2; i <= n; i++ {
invs[i] = (invs[i-1] + (i-1)*invs[i-2]) % MOD
}
ans := 0
for c := 0; c <= K; c++ {
sumWays := 0
for v := 0; v <= MaxV; v++ {
sumWays = (sumWays + dp[c][v]) % MOD
}
rem := len(Free) - c
if rem >= 0 && rem <= n {
ans = (ans + sumWays*invs[rem]) % MOD
}
}
fmt.Fprintln(writer, ans)
}
}
```