← Home
```go
package main

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

const MOD = 998244353

func power(base, exp int) int {
	res := 1
	base %= MOD
	if base < 0 {
		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, k int
	if _, err := fmt.Fscan(reader, &n, &k); err != nil {
		return
	}
	h := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &h[i])
	}

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

	fact := make([]int, D+1)
	invFact := make([]int, D+1)
	fact[0] = 1
	invFact[0] = 1
	for i := 1; i <= D; i++ {
		fact[i] = (fact[i-1] * i) % MOD
		invFact[i] = power(fact[i], MOD-2)
	}

	Z := 0
	kMinus2 := (k - 2) % MOD
	if kMinus2 < 0 {
		kMinus2 += MOD
	}

	for i := 0; i <= D/2; i++ {
		ways := fact[D]
		ways = (ways * invFact[i]) % MOD
		ways = (ways * invFact[i]) % MOD
		ways = (ways * invFact[D-2*i]) % MOD

		p := power(kMinus2, D-2*i)
		term := (ways * p) % MOD
		Z = (Z + term) % MOD
	}

	totalD := power(k, D)
	ansD := (totalD - Z + MOD) % MOD
	ansD = (ansD * 499122177) % MOD

	ans := (ansD * power(k, E)) % MOD
	fmt.Println(ans)
}
```