← Home
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')
	}
}