#include <bits/stdc++.h>
using namespace std;
long long __pow(long long a, long long e) {
  if (e == 0) {
    return 1;
  }
  long long h = __pow(a, e / 2);
  h = (h * h) % 998244353LL;
  if ((e % 2) == 1) {
    h = (a * h) % 998244353LL;
  }
  return h;
}
deque<long long> a, b;
long long get(long long x, long long c, long long k) {
  if (x % 2 == 0) {
    long long ans = k - 1;
    ans *= 998244353LL + __pow(k - 1, x) - 1;
    ans %= 998244353LL;
    ans *= __pow(k, 998244353LL - 2);
    ans %= 998244353LL;
    ans += c;
    ans %= 998244353LL;
    return ans;
  }
  long long ans = k - 1;
  ans *= __pow(k - 1, x) + 1;
  ans %= 998244353LL;
  ans *= __pow(k, 998244353LL - 2);
  ans %= 998244353LL;
  ans += 998244353LL - c;
  ans %= 998244353LL;
  return ans;
}
long long solve(deque<long long> &q, long long k) {
  long long front = 0;
  while (!q.empty() && q.front() == -1) {
    front++;
    q.pop_front();
  }
  if (q.empty()) {
    return (k * __pow(k - 1, front - 1)) % 998244353LL;
  }
  long long ans = __pow(k - 1, front);
  long long back = 0;
  while (!q.empty() && q.back() == -1) {
    back++;
    q.pop_back();
  }
  assert(!q.empty());
  ans = (ans * __pow(k - 1, back)) % 998244353LL;
  while (true) {
    long long start = 0;
    while (!q.empty() && q.front() != -1) {
      start = q.front();
      q.pop_front();
    }
    assert(start != 0);
    if (q.empty()) {
      return ans;
    }
    long long __count = 0;
    while (!q.empty() && q.front() == -1) {
      __count++;
      q.pop_front();
    }
    assert(__count > 0);
    assert(!q.empty());
    ans = (ans * get(__count, (start != q.front()) ? 1 : 0, k)) % 998244353LL;
  }
}
int main() {
  long long n, k;
  cin >> n >> k;
  for (long long i = 0; i <= n - 1; i++) {
    long long x;
    cin >> x;
    if (i % 2 == 0) {
      if (!a.empty() && x != -1) {
        if (x == a.back()) {
          cout << 0 << endl;
          return 0;
        }
      }
      a.push_back(x);
    } else {
      if (!b.empty() && x != -1) {
        if (x == b.back()) {
          cout << 0 << endl;
          return 0;
        }
      }
      b.push_back(x);
    }
  }
  cout << (solve(a, k) * solve(b, k)) % 998244353LL << endl;
}
