func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100010, M = 1505, mod = 1e9 + 7;   inline int qpow(int x, int y = mod - 2) {     int res = 1;     for (; y; y >>= 1, x = 1ll * x * x % mod)       if (y & 1) res = 1ll * res * x % mod;     return res;   }   int fac[N], inv[N];   inline int C(int x, int y) {     if (y < 0 || y > x) return 0;     return 1ll * fac[x] * inv[y] % mod * inv[x - y] % mod;   }   void C_init(int n) {     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % mod;     inv[n] = qpow(fac[n]);     for (int i = n - 1; ~i; i--) inv[i] = inv[i + 1] * (i + 1ll) % mod;   }   int n, m, p, np, k, B[M];   int pre_b[M], pre_bl[M];   void init() {     int a, b;     cin >> n >> m >> a >> b >> k;     p = 1ll * a * qpow(b) % mod, np = (1 - p + mod) % mod;     C_init(k);     for (int i = 0; i <= min(m - 1, k); ++i)       B[i] = 1ll * C(k, i) * qpow(p, i) % mod * qpow(np, k - i) % mod;     for (int i = 1; i <= m; ++i) pre_b[i] = (pre_b[i - 1] + B[i - 1]) % mod;   }   inline void add(int &x, int y) {     x += y;     if (x >= mod) x -= mod;   }   inline void sub(int &x, int y) {     x -= y;     if (x < 0) x += mod;   }   int L[M], F = 1;   void trans() {     static int S[M];     for (int i = 1; i <= m; ++i)       pre_bl[i] = (pre_bl[i - 1] + 1ll * B[i - 1] * L[i]) % mod;     for (int x = 1; x <= m; ++x)       S[x] = 1ll * B[m - x] *              (1ll * (F - L[m - x + 1] + mod) * pre_b[x] % mod - pre_bl[x] + mod) %              mod;     F = 0;     for (int i = 1; i <= m; ++i)       L[i] = (L[i - 1] + S[i - 1]) % mod, F = (F + S[i]) % mod;   }   int main() {     init();     while (n--) trans();     cout << F << endl;   }   