← Home
For problem statement at 1000-1999/1200-1299/1220-1229/1227/problemF1.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1220-1229/1227/verifierF1.go ends with All tests passed can you fix the verifier? package main

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

const mod = 998244353

func power(base, exp int64) int64 {
	res := int64(1)
	base %= mod
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % mod
		}
		base = (base * base) % mod
		exp /= 2
	}
	return res
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	var k int64
	fmt.Fscan(reader, &n, &k)

	h := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &h[i])
	}

	m := 0
	for i := 0; i < n; i++ {
		if h[i] != h[(i+1)%n] {
			m++
		}
	}

	if m == 0 {
		fmt.Println(0)
		return
	}

	fact := make([]int64, m+1)
	inv := make([]int64, m+1)
	fact[0] = 1
	for i := 1; i <= m; i++ {
		fact[i] = (fact[i-1] * int64(i)) % mod
	}
	inv[m] = power(fact[m], mod-2)
	for i := m - 1; i >= 0; i-- {
		inv[i] = (inv[i+1] * int64(i+1)) % mod
	}

	equal := int64(0)
	kMinus2 := (k - 2 + mod) % mod
	for x := 0; x <= m/2; x++ {
		ways := fact[m]
		ways = (ways * inv[x]) % mod
		ways = (ways * inv[x]) % mod
		ways = (ways * inv[m-2*x]) % mod
		ways = (ways * power(kMinus2, int64(m-2*x))) % mod
		equal = (equal + ways) % mod
	}

	total := power(k, int64(m))
	greater := (total - equal + mod) % mod
	greater = (greater * 499122177) % mod

	ans := (greater * power(k, int64(n-m))) % mod
	fmt.Println(ans)
}