← Home
For problem statement at 1000-1999/1600-1699/1620-1629/1622/problemD.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1620-1629/1622/verifierD.go ends with All 100 tests passed. can you fix the verifier? ```go
package main

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

const MOD = 998244353

func power(a, b int64) int64 {
	var 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 main() {
	reader := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, k int
	if _, err := fmt.Fscan(reader, &n, &k); err != nil {
		return
	}
	var s string
	if _, err := fmt.Fscan(reader, &s); err != nil {
		return
	}

	ones := make([]int, 0, n)
	for i, c := range s {
		if c == '1' {
			ones = append(ones, i)
		}
	}
	m := len(ones)

	if k == 0 || k > m {
		fmt.Fprintln(out, 1)
		return
	}

	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
	}

	P := make([]int, m+2)
	P[0] = -1
	for i := 0; i < m; i++ {
		P[i+1] = ones[i]
	}
	P[m+1] = n

	var ans int64 = 0

	for i := 0; i <= m-k; i++ {
		length := P[i+k+1] - P[i] - 1
		ans = (ans + nCr(length, k)) % MOD
	}

	for i := 0; i < m-k; i++ {
		length := P[i+k+1] - P[i+1] - 1
		ans = (ans - nCr(length, k-1) + MOD) % MOD
	}

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