For problem statement at 1000-1999/1900-1999/1940-1949/1946/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1940-1949/1946/verifierE.go ends with All 100 tests passed. can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strconv"
)
const MOD int64 = 1000000007
const MAXN = 200000
func modPow(a, e int64) int64 {
res := int64(1)
for e > 0 {
if e&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
e >>= 1
}
return res
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val
}
fact := make([]int64, MAXN+1)
invFact := make([]int64, MAXN+1)
fact[0] = 1
for i := 1; i <= MAXN; i++ {
fact[i] = fact[i-1] * int64(i) % MOD
}
invFact[MAXN] = modPow(fact[MAXN], MOD-2)
for i := MAXN; i >= 1; i-- {
invFact[i-1] = invFact[i] * int64(i) % MOD
}
comb := func(n, k int) int64 {
if k < 0 || k > n {
return 0
}
return fact[n] * invFact[k] % MOD * invFact[n-k] % MOD
}
t := nextInt()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
for ; t > 0; t-- {
n := nextInt()
m1 := nextInt()
m2 := nextInt()
p := make([]int, m1)
s := make([]int, m2)
for i := 0; i < m1; i++ {
p[i] = nextInt()
}
for i := 0; i < m2; i++ {
s[i] = nextInt()
}
if p[0] != 1 || s[m2-1] != n || p[m1-1] != s[0] {
out.WriteString("0\n")
continue
}
x := p[m1-1]
ans := comb(n-1, x-1)
for i := 0; i+1 < m1; i++ {
ans = ans * fact[p[i+1]-2] % MOD
ans = ans * invFact[p[i]-1] % MOD
}
for i := 0; i+1 < m2; i++ {
ans = ans * fact[n-s[i]-1] % MOD
ans = ans * invFact[n-s[i+1]] % MOD
}
out.WriteString(strconv.FormatInt(ans, 10))
out.WriteByte('\n')
}
}