← Home
For problem statement at 1000-1999/1900-1999/1940-1949/1948/problemF.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1940-1949/1948/verifierF.go ends with All tests passed! can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD = 998244353

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.NewReaderSize(os.Stdin, 1<<20)
	writer := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer writer.Flush()

	var n, q int
	fmt.Fscan(reader, &n, &q)

	a := make([]int, n+1)
	prefA := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &a[i])
		prefA[i] = prefA[i-1] + a[i]
	}

	b := make([]int, n+1)
	prefB := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &b[i])
		prefB[i] = prefB[i-1] + b[i]
	}

	A_tot := prefA[n]
	B_tot := prefB[n]

	fact := make([]int64, B_tot+1)
	invFact := make([]int64, B_tot+1)
	fact[0] = 1
	invFact[0] = 1
	for i := 1; i <= B_tot; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}
	invFact[B_tot] = modInverse(fact[B_tot])
	for i := B_tot - 1; i >= 1; i-- {
		invFact[i] = (invFact[i+1] * int64(i+1)) % MOD
	}

	nCr := func(n, r int) int64 {
		if r < 0 || r > n {
			return 0
		}
		num := fact[n]
		den := (invFact[r] * invFact[n-r]) % MOD
		return (num * den) % MOD
	}

	prefComb := make([]int64, B_tot+1)
	prefComb[0] = nCr(B_tot, 0)
	for i := 1; i <= B_tot; i++ {
		prefComb[i] = (prefComb[i-1] + nCr(B_tot, i)) % MOD
	}

	inv2 := modInverse(2)
	inv2_pow := power(inv2, int64(B_tot))

	for i := 0; i < q; i++ {
		var l, r int
		fmt.Fscan(reader, &l, &r)

		Sa := prefA[r] - prefA[l-1]
		Sb := prefB[r] - prefB[l-1]

		k := B_tot - Sb + A_tot - 2*Sa

		var ans int64
		if k+1 > B_tot {
			ans = 0
		} else if k+1 <= 0 {
			ans = 1
		} else {
			sum := (prefComb[B_tot] - prefComb[k] + MOD) % MOD
			ans = (sum * inv2_pow) % MOD
		}

		fmt.Fprintln(writer, ans)
	}
}
```