func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MOD = 1000LL * 1000 * 1000 + 7;   const int INF = 1000 * 1000 * 1000;   const long long base = 1e18;   const int MAXN = 600000;   const double EPS = 1e-9;   const double PI = acos(-1.);   long long binPow(long long a, long long x) {     long long res = 1;     while (x) {       if (x & 1) {         res *= a;         res %= MOD;       }       a *= a;       a %= MOD;       x /= 2;     }     return res;   }   long long dpT[200000][2];   long long n, m;   long long a[200000];   long long b[200000];   long long dp(int pos, int more) {     if (pos == n) {       return more;     }     if (dpT[pos][more] != -1) return dpT[pos][more];     if (more == 1) {       long long ans = dp(pos + 1, more);       if (a[pos] == 0) {         ans *= m;         ans %= MOD;       }       if (b[pos] == 0) {         ans *= m;         ans %= MOD;       }       return dpT[pos][more] = ans;     }     if (a[pos] && b[pos] && a[pos] < b[pos]) return dpT[pos][more] = 0;     if (a[pos] && b[pos] && a[pos] > b[pos])       return dpT[pos][more] = dp(pos + 1, 1);     if (a[pos] && b[pos] && a[pos] == b[pos]) {       return dpT[pos][more] = dp(pos + 1, 0);     }     if (a[pos] == 0 && b[pos]) {       long long res = 0;       res += (dp(pos + 1, 1) * (m - b[pos])) % MOD;       res %= MOD;       res += dp(pos + 1, 0);       res %= MOD;       return dpT[pos][more] = res;     }     if (a[pos] && b[pos] == 0) {       long long res = 0;       res += (dp(pos + 1, 1) * (a[pos] - 1)) % MOD;       res %= MOD;       res += dp(pos + 1, 0);       res %= MOD;       return dpT[pos][more] = res;     }     long long res = 0;     long long cur = (m * (m - 1) / 2) % MOD;     res += (dp(pos + 1, 1) * (cur)) % MOD;     res %= MOD;     res += (dp(pos + 1, 0) * m) % MOD;     res %= MOD;     return dpT[pos][more] = res;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> n >> m;     int cnt = 0;     for (int i = (0); i < (n); ++i) {       cin >> a[i];       if (!a[i]) cnt++;     }     for (int i = (0); i < (n); ++i) {       cin >> b[i];       if (!b[i]) cnt++;     }     memset(dpT, -1, sizeof dpT);     long long div = binPow(m, cnt);     long long y = binPow(div, MOD - 2);     cout << (dp(0, 0) * y) % MOD;     return 0;   }   