func_code_string: #include <bits/stdc++.h>   using namespace std;   int read() {     int X = 0, w = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) w = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) X = X * 10 + c -  0 , c = getchar();     return X * w;   }   const int N = 1500 + 10, K = 100000 + 10;   const int mod = 1e9 + 7;   int qpow(int a, int b) {     int c = 1;     for (; b; b >>= 1, a = 1ll * a * a % mod)       if (b & 1) c = 1ll * c * a % mod;     return c;   }   int n, m, a, b, k, p;   int fac[K], ifac[K], d[K], sd[N], fr[N][N], sr[N][N], ss[N][N];   int C(int n, int m) { return 1ll * fac[n] * ifac[m] % mod * ifac[n - m] % mod; }   int main() {     n = read(), m = read(), a = read(), b = read(), k = read();     p = 1ll * a * qpow(b, mod - 2) % mod;     fac[0] = 1;     for (int i = 1; i <= k; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;     ifac[k] = qpow(fac[k], mod - 2);     for (int i = k; i; --i) ifac[i - 1] = 1ll * ifac[i] * i % mod;     for (int i = 0; i <= k; ++i)       d[i] = 1ll * C(k, i) * qpow(p, i) % mod * qpow(1 - p + mod, k - i) % mod;     for (int i = 1; i <= m; ++i) sd[i] = (sd[i - 1] + d[i - 1]) % mod;     fr[0][m] = sr[0][m] = 1;     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= m; ++j) {         fr[i][j] = (1ll * (sr[i - 1][m] - sr[i - 1][m - j] + mod) * sd[j] -                     ss[i - 1][j] + mod) %                    mod * d[m - j] % mod;         sr[i][j] = (sr[i][j - 1] + fr[i][j]) % mod;         ss[i][j] = (ss[i][j - 1] + 1ll * d[j - 1] * sr[i][j - 1]) % mod;       }     printf( %d n , sr[n][m]);     return 0;   }   