#include <bits/stdc++.h>
using namespace std;
const long long maxN = 2e5 + 5;
const long long MOD = 998244353;
const long long inf = 1e18;
bool maxi(long long &a, const long long b) {
  return a < b ? (a = b, true) : false;
};
long long n, k, a[maxN], res = 1, dp[2][maxN];
bitset<maxN> vis[2];
vector<long long> v[2], idx;
long long power(long long n, long long k) {
  if (!k) return 1;
  long long tmp = power(n, k >> 1);
  tmp = (((tmp) * (tmp)) % MOD);
  if (k & 1) tmp = (((tmp) * (n)) % MOD);
  return tmp;
}
long long DP(const bool f, const long long l) {
  if (!l) return !f;
  if (!vis[f][l]) {
    vis[f][l] = 1;
    if (l & 1) {
      if (f)
        dp[f][l] =
            (((power(DP(true, l >> 1), 2)) +
              (((((((k) - (1) + MOD) % MOD)) * (power(DP(false, l >> 1), 2))) %
                MOD))) %
             MOD);
      else
        dp[f][l] =
            ((((((2) * ((((DP(true, l >> 1)) * (DP(false, l >> 1))) % MOD))) %
                MOD)) +
              (((((((k) - (2) + MOD) % MOD)) * (power(DP(false, l >> 1), 2))) %
                MOD))) %
             MOD);
    } else {
      if (f)
        dp[f][l] = ((((((k) - (1) + MOD) % MOD)) * (DP(false, l - 1))) % MOD);
      else
        dp[f][l] =
            (((DP(true, l - 1)) +
              (((((((k) - (2) + MOD) % MOD)) * (DP(false, l - 1))) % MOD))) %
             MOD);
    }
  }
  return dp[f][l];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (long long i = (1), _b = (n); i <= (_b); i++) {
    cin >> a[i];
    v[i & 1].push_back(a[i]);
  }
  for (long long i = (0), _b = (1); i <= (_b); i++) {
    idx.clear();
    for (long long j = (0), _b = (((long long)(v[i]).size())); j < (_b); j++)
      if (v[i][j] > 0) idx.push_back(j);
    if (idx.empty())
      res =
          (((res) *
            ((((k) * (power(k - 1, ((long long)(v[i]).size()) - 1))) % MOD))) %
           MOD);
    else {
      res = (((res) * (power(k - 1, idx.front() + ((long long)(v[i]).size()) -
                                        1 - idx.back()))) %
             MOD);
      for (long long j = (1), _b = (((long long)(idx).size())); j < (_b); j++)
        res = (((res) * (DP(v[i][idx[j - 1]] == v[i][idx[j]],
                            idx[j] - idx[j - 1] - 1))) %
               MOD);
    }
  }
  cout << res << '\n';
  return 0;
}
