#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;
}
