For problem statement at 1000-1999/1400-1499/1450-1459/1450/problemH1.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1450-1459/1450/verifierH1.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func power(a, b int64) int64 {
res := int64(1)
a %= MOD
for b > 0 {
if b%2 == 1 {
res = (res * a) % MOD
}
a = (a * a) % MOD
b /= 2
}
return res
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n, m int
fmt.Fscan(reader, &n, &m)
var s string
fmt.Fscan(reader, &s)
kVal := 0
q := 0
for i := 0; i < n; i++ {
if s[i] == '?' {
q++
} else {
val := 0
if s[i] == 'b' {
val = 1
} else {
val = -1
}
if i%2 != 0 {
val = -val
}
kVal += val
}
}
fact := make([]int64, n+1)
invFact := make([]int64, n+1)
fact[0] = 1
invFact[0] = 1
for i := 1; i <= n; i++ {
fact[i] = (fact[i-1] * int64(i)) % MOD
}
invFact[n] = power(fact[n], MOD-2)
for i := n - 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
}
return fact[n] * invFact[r] % MOD * invFact[n-r] % MOD
}
ans := int64(0)
for k := 0; k <= q; k++ {
y := 2*k - q
sum := kVal + y
if sum%4 == 0 {
term := int64(abs(sum) / 4) % MOD
ways := nCr(q, k)
ans = (ans + term*ways) % MOD
}
}
denom := power(2, int64(q-1))
invDenom := power(denom, MOD-2)
ans = (ans * invDenom) % MOD
fmt.Println(ans)
}