func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   int dp[1501][1501], sum[1501], tsum[1501], pro, ex[2][100001], c[100001],       P[1501];   int sp[1501], gp[1501], inv[1501];   int power(int a, int n) {     if (n == 0) return 1;     int res = power(a, n / 2);     res = (int)((long long)res * (long long)res % mod);     if (n % 2) res = (int)((long long)res * (long long)a % mod);     return res;   }   int main() {     int n, m, a, b, k, i, j, s, p, q, tmp;     scanf( %d%d%d%d%d , &n, &m, &a, &b, &k);     pro = (int)((long long)a * (long long)power(b, mod - 2) % mod);     for (i = 0; i <= 100000; i++) {       if (i == 0) {         ex[0][i] = ex[1][i] = 1;         c[i] = 1;       } else {         ex[1][i] = (int)((long long)ex[1][i - 1] * (long long)(1 - pro) % mod);         if (ex[1][i] < 0) ex[1][i] += mod;         ex[0][i] = (int)((long long)ex[0][i - 1] * (long long)pro % mod);         c[i] = (int)((long long)c[i - 1] * (long long)(k - i + 1) % mod);         c[i] = (int)((long long)c[i] * (long long)power(i, mod - 2) % mod);       }     }     memset(P, 0, sizeof(P));     for (i = 0; i <= m; i++) {       if (i <= k) {         P[i] = (int)((long long)c[i] * (long long)ex[0][i] % mod);         P[i] = (int)((long long)P[i] * (long long)ex[1][k - i] % mod);       }       sp[i] = P[i];       if (i) sp[i] = (sp[i - 1] + sp[i]) % mod;       inv[i] = power(P[i], mod - 2);     }     memset(dp, 0, sizeof(dp));     dp[0][m] = 1;     for (i = 0; i < n; i++) {       for (j = 0; j <= m; j++) {         sum[j] = (int)((long long)P[j] * (long long)dp[i][j] % mod);         if (j) sum[j] = (sum[j - 1] + sum[j]) % mod;       }       for (j = 0; j < m; j++) {         tsum[j] = (int)((long long)sp[m - 1 - j] * (long long)dp[i][m] % mod);         tmp = (int)((long long)sp[m - 1 - j] * (long long)dp[i][j] % mod);         tsum[j] = (tsum[j] - tmp + mod) % mod;         tsum[j] = (tsum[j] - sum[m - 1 - j] + mod) % mod;         tsum[j] = (int)((long long)tsum[j] * (long long)P[j] % mod);         if (j) tsum[j] = (tsum[j - 1] + tsum[j]) % mod;       }       dp[i + 1][0] = 0;       dp[i + 1][m] = tsum[m - 1];       for (j = 1; j < m; j++) {         if (j == 0)           dp[i + 1][m - j] = tsum[j - 1];         else           dp[i + 1][m - j] = (dp[i + 1][m] - tsum[j - 1] + mod) % mod;       }     }     printf( %d n , dp[n][m]);     return 0;   }   