For problem statement at 1000-1999/1200-1299/1260-1269/1264/problemD1.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1260-1269/1264/verifierD1.go ends with All tests passed can you fix the verifier? 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() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 2000000), 2000000)
if !scanner.Scan() {
return
}
s := scanner.Text()
n := len(s)
maxSize := n + 5
fact := make([]int64, maxSize)
invFact := make([]int64, maxSize)
fact[0] = 1
invFact[0] = 1
for i := 1; i < maxSize; i++ {
fact[i] = (fact[i-1] * int64(i)) % MOD
}
invFact[maxSize-1] = modInverse(fact[maxSize-1])
for i := maxSize - 2; 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
}
totalB, totalY := 0, 0
for i := 0; i < n; i++ {
if s[i] == ')' {
totalB++
} else if s[i] == '?' {
totalY++
}
}
ans := int64(0)
A, X, B, Y := 0, 0, totalB, totalY
for i := 0; i <= n; i++ {
Q := X + Y
K := Y - A + B
term1 := (int64(A) * nCr(Q, K)) % MOD
term2 := (int64(X) * nCr(Q-1, K-1)) % MOD
ans = (ans + term1 + term2) % MOD
if i < n {
if s[i] == '(' {
A++
} else if s[i] == ')' {
B--
} else {
X++
Y--
}
}
}
fmt.Println(ans)
}