For problem statement at 1000-1999/1500-1599/1520-1529/1525/problemE.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1520-1529/1525/verifierE.go ends with case 1 failed
expected: 0
got: 2
exit status 1 can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strconv"
)
const MOD int64 = 998244353
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(bufio.NewReaderSize(os.Stdin, 1<<20))
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
x := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
x = x*10 + int(data[idx]-'0')
idx++
}
return x
}
n := nextInt()
m := nextInt()
size := n + 2
cnt := make([]uint8, m*size)
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
d := nextInt()
cnt[j*size+d]++
}
}
fact := int64(1)
for i := 1; i <= n; i++ {
fact = fact * int64(i) % MOD
}
invFact := modPow(fact, MOD-2)
ans := int64(0)
for j := 0; j < m; j++ {
base := j * size
fail := int64(1)
suffix := 0
for r := n; r >= 1; r-- {
suffix += int(cnt[base+r+1])
factor := suffix - (n - r)
if factor <= 0 {
fail = 0
break
}
fail *= int64(factor)
}
val := int64(1)
if fail != 0 {
val = (val - (fail%MOD)*invFact%MOD + MOD) % MOD
}
ans += val
if ans >= MOD {
ans -= MOD
}
}
os.Stdout.WriteString(strconv.FormatInt(ans, 10))
}