#include<bits/stdc++.h> usingnamespace std; #ifdef LOCAL #define debug(...) fprintf(stdout, ##__VA_ARGS__) #else #define debug(...) void(0) #endif #define int long long intread(){ int x; scanf("%lld", &x); return x; } #define pb push_back #define N 1000010 //#define M #define mo (int)(1e9 + 7) int n, m, i, j, k, T; int a[N], dp[N][2], flg, sum, ans;
signedmain(){ #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif n = read(); m = read(); sum = 1; for(i = 1; i <= n; ++i) { a[i] = read(); if(a[i] == -1) sum = sum * m % mo; if(a[i] > 1 && a[i] <= n - 1) flg = 1; } if(flg) returnprintf("%lld", sum), 0; dp[1][0] = 1; for(i = 2; i < n; ++i) { if(a[i] != -1) { if(a[i] == 1) dp[i][1] = dp[i - 1][0]; else dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) % mo; continue; } if(m >= n) dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) * (m - n + 1) % mo; dp[i][1] = dp[i - 1][0]; // debug("%lld %lld\n", dp[i][0], dp[i][1]); } ans = (dp[n - 1][0] + dp[n - 1][1]) % mo; if(a[1] == -1) { if(m >= n) ans = ans * (m - n + 1) % mo; else ans = 0; } if(a[n] == -1) { if(m >= n) ans = ans * (m - n + 1) % mo; else ans = 0; } if(a[1] == 1) ans = 0; if(a[n] == 1) ans = 0; if(n & 1) { for(i = 1; i <= n; ++i) if(a[i] > 1) break; if(i > n) ++ans; // debug("%lld | %lld", ans, sum); ans = sum - ans; ans = (ans % mo + mo) % mo; printf("%lld", ans % mo); return0; } ans = sum - ans; ans = (ans % mo + mo) % mo; printf("%lld", ans % mo); return0; }