#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long llinf = 0x3f3f3f3f3f3f3f3f;
template <typename INint>
inline void IN(INint &first) {
  first = 0;
  int f = 1;
  char c;
  cin.get(c);
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    cin.get(c);
  }
  while (c >= '0' && c <= '9') {
    first = first * 10 + c - '0';
    cin.get(c);
  }
  first *= f;
}
template <typename INint>
inline void OUT(INint first) {
  if (first > 9) OUT(first / 10);
  cout.put(first % 10 + '0');
}
const int maxn = int(2e5 + 5);
vector<int> v1, v2;
long long n, k;
int mod = 998244353;
long long dp[4][maxn];
long long get(bool sa, long long len) {
  if (len == 0) {
    if (sa)
      return 0;
    else
      return 1;
  }
  long long &ret = dp[(int)sa][len];
  if (ret == -1) {
    ret = 0;
    len--;
    int le = len / 2;
    int ri = len - le;
    len++;
    if (sa) {
      ret = (get(1, le) * get(1, ri)) % mod +
            (k - 1) * get(0, le) % mod * get(0, ri) % mod;
      ret %= mod;
    } else {
      ret = get(0, ri) * get(1, le) % mod + get(1, ri) * get(0, le) % mod;
      ret %= mod;
      ret += (k - 2) * get(0, le) % mod * get(0, ri) % mod;
      ret %= mod;
    }
  }
  return ret;
}
long long solve(vector<int> &v) {
  vector<pair<int, int> > g;
  for (int i = 0; i < int(v.size()); i++) {
    if (v[i] != -1) {
      g.push_back({i, v[i]});
    }
  }
  long long ret(1);
  if (g.size() == 0) {
    int len = v.size();
    if (len == 0)
      return 1;
    else if (len == 1)
      return k;
    ret = (1ll * k * (k - 1) % mod * get(0, len - 2) % mod +
           k * get(1, len - 2) % mod) %
          mod;
    return ret;
  } else {
    for (int i = 0; i < int(g.size() - 1); i++) {
      ret *= get((g[i].second == g[i + 1].second),
                 g[i + 1].first - g[i].first - 1);
      ret %= mod;
    }
    int len = (g[0].first);
    if (len != 0) {
      ret = ret * (((k - 1) * get(0, len - 1) % mod + get(1, len - 1)) % mod) %
            mod;
    }
    len = v.size() - 1 - g.back().first;
    if (len != 0) {
      ret = ret * (((k - 1) * get(0, len - 1) % mod + get(1, len - 1)) % mod) %
            mod;
    }
  }
  return ret;
}
int main() {
  int T(1), times(0);
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  while (++times, T--) {
    memset(dp, -1, sizeof(dp));
    cin >> n >> k;
    for (int i = 1; i <= int(n); i++) {
      int a;
      cin >> a;
      if (i & 1) {
        v1.push_back(a);
      } else
        v2.push_back(a);
    }
    long long ans = solve(v1) * solve(v2);
    ans %= mod;
    cout << ans << endl;
  }
  return 0;
}
