func_code_string: #include <bits/stdc++.h>   long long n, s[2][100010], k;   long long dp[100010][2];   long long ans = 1;   long long p(long long a, long long b) {     if (b == 0) return 1LL;     if (b == 1) return a % 998244353;     long long x = p(a, b >> 1);     x *= x;     x %= 998244353;     x *= p(a, b & 1);     x %= 998244353;     return x;   }   void solve(long long *a, long long len) {     long long l, r;     l = 0;     while (!(~a[l]) && a[l]) l++;     if (l == len + 1) {       ans = ans * k % 998244353 * p(k - 1, len) % 998244353;       return;     }     ans *= p(k - 1, l);     ans %= 998244353;     r = len;     while (r >= 0 && !(~a[r])) r--;     if (r < len) ans *= p(k - 1, len - r), ans %= 998244353;     r++;     for (int i = l, count = 0; i <= r; i++) {       if (a[i] == -1) {         count++;         continue;       } else if (count) {         if (a[i] == a[i - count - 1])           ans *= dp[count][1];         else           ans *= dp[count][0];         ans %= 998244353;         count = 0;       } else if (i && a[i] == a[i - 1]) {         ans = 0;         return;       }     }     return;   }   int main() {     scanf( %lld%lld , &n, &k);     for (int i = 0; i < n; i++) scanf( %lld , &s[i & 1][i >> 1]);     dp[1][0] = k - 2;     dp[1][1] = k - 1;     for (int i = 2; i <= n >> 1; i++) {       dp[i][0] = dp[i - 1][1] + dp[i - 1][0] * (k - 2) % 998244353;       dp[i][1] = dp[i - 1][0] * (k - 1) % 998244353;       dp[i][0] %= 998244353;       dp[i][1] %= 998244353;     }     solve(s[0], n - 1 >> 1);     if (!ans) {       puts( 0 );       return 0;     }     solve(s[1], (n - 1 >> 1) - (n & 1));     printf( %lld n , ans);     return 0;   }   