← Home
For problem statement at 1000-1999/1100-1199/1140-1149/1140/problemE.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1140-1149/1140/verifierE.go ends with All tests passed can you fix the verifier? ```go
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 solveSubarray(b []int, k int, dp0, P []int64) int64 {
	m := len(b)
	if m == 0 {
		return 1
	}

	I := make([]int, 0)
	for i, val := range b {
		if val != -1 {
			I = append(I, i)
		}
	}

	if len(I) == 0 {
		return int64(k) * power(int64(k-1), int64(m-1)) % MOD
	}

	ans := int64(1)
	ans = ans * power(int64(k-1), int64(I[0])) % MOD
	ans = ans * power(int64(k-1), int64(m-1-I[len(I)-1])) % MOD

	for j := 0; j < len(I)-1; j++ {
		c := I[j+1] - I[j] - 1
		L := b[I[j]]
		R := b[I[j+1]]
		var W int64
		if L == R {
			W = int64(k-1) * P[c] % MOD
		} else {
			W = (dp0[c] + int64(k-2)*P[c]) % MOD
		}
		ans = ans * W % MOD
	}

	return ans
}

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

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

	b1 := make([]int, 0, n/2+1)
	b2 := make([]int, 0, n/2+1)
	for i := 0; i < n; i++ {
		if i%2 == 0 {
			b1 = append(b1, a[i])
		} else {
			b2 = append(b2, a[i])
		}
	}

	dp0 := make([]int64, n+1)
	P := make([]int64, n+1)
	dp0[0] = 1
	P[0] = 0
	for i := 1; i <= n; i++ {
		dp0[i] = int64(k-1) * P[i-1] % MOD
		P[i] = (dp0[i-1] + int64(k-2)*P[i-1]) % MOD
	}

	ans1 := solveSubarray(b1, k, dp0, P)
	ans2 := solveSubarray(b2, k, dp0, P)

	total := (ans1 * ans2) % MOD
	fmt.Println(total)
}
```