func_code_string: #include <bits/stdc++.h>   template <typename T>   inline bool MIN(T &a, const T &b) {     return a > b ? a = b, 1 : 0;   }   template <typename T>   inline bool MAX(T &a, const T &b) {     return a < b ? a = b, 1 : 0;   }   using namespace std;   int n, m, K, p;   int exgcd(int a, int b, int &x, int &y) {     if (b == 0) {       x = 1, y = 0;       return a;     }     int res = exgcd(b, a % b, x, y);     int t = x;     x = y;     y = t - a / b * y;     return res;   }   int get_inv(int a) {     int x, y;     exgcd(a, 1000000007, x, y);     return (x % 1000000007 + 1000000007) % 1000000007;   }   int P[100010], sum_P[100010];   int g[1510][1510], sum[1510][1510];   int main() {     scanf( %d%d , &n, &m);     int a, b;     scanf( %d%d , &a, &b);     p = (long long)a * get_inv(b) % 1000000007;     scanf( %d , &K);     int pow2 = 1;     for (int i = 1; i <= K; ++i)       pow2 = (long long)pow2 * (1 - p + 1000000007) % 1000000007;     for (int i = 0, pow = 1, c = 1; i <= K; ++i) {       if (i == K && p == 1) pow2 = 1;       P[i] = (long long)c * pow % 1000000007 * pow2 % 1000000007;       pow2 = (long long)pow2 * get_inv((1 - p + 1000000007) % 1000000007) %              1000000007;       pow = (long long)pow * p % 1000000007;       c = (long long)c * (K - i) % 1000000007 * get_inv(i + 1) % 1000000007;     }     sum_P[0] = P[0];     for (int i = 1; i <= m; ++i) sum_P[i] = (sum_P[i - 1] + P[i]) % 1000000007;     g[0][m] = sum[0][m] = 1;     for (int i = 1; i <= n; ++i) {       int tmp = 0;       for (int j = 1; j <= m; ++j) {         tmp = (tmp + (long long)P[j - 1] * sum[i - 1][j - 1]) % 1000000007;         g[i][j] = ((long long)sum_P[j - 1] *                        (sum[i - 1][m] - sum[i - 1][m - j] + 1000000007) -                    tmp + 1000000007) %                   1000000007;         g[i][j] = (long long)g[i][j] * P[m - j] % 1000000007;         sum[i][j] = (sum[i][j - 1] + g[i][j]) % 1000000007;       }     }     printf( %d n , sum[n][m]);     return 0;   }   