For problem statement at 1000-1999/1700-1799/1760-1769/1765/problemC.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1760-1769/1765/verifierC.go ends with All 45 tests passed. can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
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() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var n, k int
fmt.Fscan(in, &n, &k)
N := 4 * n
maxM := k
if maxM > N-1 {
maxM = N - 1
}
fact := make([]int64, N+1)
invFact := make([]int64, N+1)
fact[0] = 1
for i := 1; i <= N; i++ {
fact[i] = fact[i-1] * int64(i) % MOD
}
invFact[N] = modPow(fact[N], MOD-2)
for i := N; i >= 1; i-- {
invFact[i-1] = invFact[i] * int64(i) % MOD
}
comb := func(nn, rr int) int64 {
if rr < 0 || rr > nn {
return 0
}
return fact[nn] * invFact[rr] % MOD * invFact[nn-rr] % MOD
}
invSmall := make([]int64, N+1)
if N >= 1 {
invSmall[1] = 1
}
for i := 2; i <= N; i++ {
invSmall[i] = MOD - (MOD/int64(i))*invSmall[int(MOD%int64(i))]%MOD
}
chooseN := make([]int64, n+1)
for i := 0; i <= n; i++ {
chooseN[i] = comb(n, i)
}
A := make([]int64, maxM+1)
P2 := make([]int64, maxM+1)
P3 := make([]int64, maxM+1)
P4 := make([]int64, maxM+1)
NA := make([]int64, maxM+1)
NP2 := make([]int64, maxM+1)
NP3 := make([]int64, maxM+1)
NP4 := make([]int64, maxM+1)
sumCount := make([]int64, maxM+1)
invChoose := make([]int64, maxM+1)
invFactN := invFact[N]
for m := 0; m <= maxM; m++ {
if m <= n {
A[m] = chooseN[m]
}
if m <= 2*n {
P2[m] = comb(2*n, m)
}
if m <= 3*n {
P3[m] = comb(3*n, m)
}
P4[m] = comb(N, m)
invChoose[m] = invFactN * fact[m] % MOD * fact[N-m] % MOD
}
for r := 0; r < n; r++ {
s := r
c := chooseN[r]
c2 := c * c % MOD
c3 := c2 * c % MOD
c4 := c2 * c2 % MOD
m2c := 2 * c % MOD
m3c := 3 * c % MOD
m4c := 4 * c % MOD
m3c2 := 3 * c2 % MOD
m6c2 := 6 * c2 % MOD
m4c3 := 4 * c3 % MOD
for m := 0; m <= maxM; m++ {
vA := A[m]
if m == s {
vA -= c
if vA < 0 {
vA += MOD
}
}
NA[m] = vA
v2 := P2[m]
if m >= s {
v2 -= m2c * A[m-s] % MOD
}
if m == 2*s {
v2 += c2
}
v2 %= MOD
if v2 < 0 {
v2 += MOD
}
NP2[m] = v2
v3 := P3[m]
if m >= s {
v3 -= m3c * P2[m-s] % MOD
}
if m >= 2*s {
v3 += m3c2 * A[m-2*s] % MOD
}
if m == 3*s {
v3 -= c3
}
v3 %= MOD
if v3 < 0 {
v3 += MOD
}
NP3[m] = v3
v4 := P4[m]
if m >= s {
v4 -= m4c * P3[m-s] % MOD
}
if m >= 2*s {
v4 += m6c2 * P2[m-2*s] % MOD
}
if m >= 3*s {
v4 -= m4c3 * A[m-3*s] % MOD
}
if m == 4*s {
v4 += c4
}
v4 %= MOD
if v4 < 0 {
v4 += MOD
}
NP4[m] = v4
}
A, NA = NA, A
P2, NP2 = NP2, P2
P3, NP3 = NP3, P3
P4, NP4 = NP4, P4
for m := 0; m <= maxM; m++ {
x := sumCount[m] + P4[m]
if x >= MOD {
x -= MOD
}
sumCount[m] = x
}
}
eMin := make([]int64, maxM+1)
for m := 0; m <= maxM; m++ {
eMin[m] = sumCount[m] * invChoose[m] % MOD
}
ans := int64(0)
nMod := int64(n) % MOD
if k < N {
for m := 0; m < k; m++ {
val := nMod - eMin[m]
if val < 0 {
val += MOD
}
ans += val * invSmall[N-m] % MOD
if ans >= MOD {
ans -= MOD
}
}
tail := nMod - eMin[k]
if tail < 0 {
tail += MOD
}
ans += tail
ans %= MOD
} else {
for m := 0; m < N; m++ {
val := nMod - eMin[m]
if val < 0 {
val += MOD
}
ans += val * invSmall[N-m] % MOD
ans %= MOD
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprintln(out, ans)
out.Flush()
}
```