← Home
For problem statement at 1000-1999/1700-1799/1720-1729/1725/problemC.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1720-1729/1725/verifierC.go ends with All tests passed can you fix the verifier? ```go
package main

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

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func modpow(b, e, mod int64) int64 {
	res := int64(1)
	for e > 0 {
		if e&1 == 1 {
			res = res * b % mod
		}
		b = b * b % mod
		e >>= 1
	}
	return res
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	var data []int
	for scanner.Scan() {
		x, _ := strconv.Atoi(scanner.Text())
		data = append(data, x)
	}
	index := 0
	N := data[index]
	index++
	M := data[index]
	index++
	d := data[index : index+N]
	const MOD int64 = 998244353
	const MAXN = 300010
	S := 0
	for _, v := range d {
		S += v
	}
	if S%2 != 0 {
		fmt.Println(modpow(int64(M), int64(N), MOD))
		return
	}
	if S == 0 {
		fmt.Println(modpow(int64(M), int64(N), MOD))
		return
	}
	half := S / 2
	pos := make([]int, N)
	for i := 1; i < N; i++ {
		pos[i] = pos[i-1] + d[i-1]
	}
	mp := make(map[int]int)
	for i := 0; i < N; i++ {
		mp[pos[i]] = i
	}
	vis := make([]bool, N)
	K := 0
	for i := 0; i < N; i++ {
		if vis[i] {
			continue
		}
		target := (pos[i] + half) % S
		if j, ok := mp[target]; ok && !vis[j] {
			K++
			vis[i] = true
			vis[j] = true
		}
	}
	L := N - 2*K
	fact := make([]int64, MAXN)
	fact[0] = 1
	for i := 1; i < MAXN; i++ {
		fact[i] = fact[i-1] * int64(i) % MOD
	}
	invfact := make([]int64, MAXN)
	invfact[MAXN-1] = modpow(fact[MAXN-1], MOD-2, MOD)
	for i := MAXN - 2; i >= 0; i-- {
		invfact[i] = invfact[i+1] * int64(i+1) % MOD
	}
	ans := int64(0)
	max_t := min(K, M)
	for t := 0; t <= max_t; t++ {
		bc := (fact[K] * invfact[t] % MOD * invfact[K-t]) % MOD
		pm := fact[M] * invfact[M-t] % MOD
		m := M - t
		pow1 := modpow(int64(m), int64(L), MOD)
		mm1 := int64(0)
		if m >= 1 {
			mm1 = int64(m - 1)
		} else {
			mm1 = MOD - 1
		}
		base2 := (int64(m) * mm1) % MOD
		pow2 := modpow(base2, int64(K-t), MOD)
		ways := (bc * pm) % MOD
		ways = (ways * pow1) % MOD
		ways = (ways * pow2) % MOD
		ans = (ans + ways) % MOD
	}
	fmt.Println(ans)
}
```