func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   void read(T& x) {     static char c;     static int f;     for (c = getchar(), f = 1; c <  0  || c >  9 ; c = getchar())       if (c ==  - ) f = -f;     for (x = 0; c >=  0  && c <=  9 ; c = getchar()) x = x * 10 + (c & 15);     x *= f;   }   template <typename T>   void write(T x) {     static char q[65];     int cnt = 0;     if (x < 0) putchar( - ), x = -x;     q[++cnt] = x % 10, x /= 10;     while (x) q[++cnt] = x % 10, x /= 10;     while (cnt) putchar(q[cnt--] +  0 );   }   const int mod = 1000000007, maxn = 1000005;   int mo(const int x) { return x >= mod ? x - mod : x; }   int iac[maxn], fac[maxn], _n[maxn], _m[maxn];   int main() {     int n, m, a, b;     read(n), read(m), read(a), read(b);     int mx = max(n, m);     iac[0] = iac[1] = fac[0] = fac[1] = _n[1] = _m[0] = 1;     _m[1] = m;     for (int i = 2; i <= mx; ++i)       iac[i] = 1ll * (mod - mod / i) * iac[mod % i] % mod;     _n[0] = iac[n];     for (int i = 2; i <= mx; ++i)       iac[i] = 1ll * iac[i - 1] * iac[i] % mod,       fac[i] = 1ll * fac[i - 1] * i % mod, _m[i] = 1ll * _m[i - 1] * m % mod,       _n[i] = 1ll * _n[i - 1] * n % mod;     int ans = 0;     for (int i = 1; i <= n - 1 && i <= m; ++i)       ans = mo(ans + 1ll * (i + 1) * _n[n - 1 - i] % mod * _m[n - 1 - i] % mod *                          iac[n - 1 - i] % mod * iac[m - i] % mod * iac[i - 1] %                          mod);     ans = 1ll * ans * fac[n - 2] % mod * fac[m - 1] % mod;     write(ans), putchar(  n );     return 0;   }   