func_code_string: #include <bits/stdc++.h>   using namespace std;   const int Inf = (1 << 30) - 1;   const long long lInf = (1LL << 62) - 1;   const long long Mod = 1000000007;   long long fac[1000010];   long long inv[1000010];   long long powm[1000010];   long long pown[1000010];   int a, b;   long long n, m;   long long fpow(long long a, long long b, long long Mod) {     a %= Mod;     b %= Mod;     long long mul = 1;     while (b) {       if (b & 1) (mul *= a) %= Mod;       (a *= a) %= Mod;       b >>= 1;     }     return mul;   }   void init() {     int tmp = max(n, m);     fac[0] = fac[1] = 1;     for (int i = 2; i <= tmp; ++i) fac[i] = fac[i - 1] * i % Mod;     inv[tmp] = fpow(fac[tmp], Mod - 2, Mod);     for (int i = tmp; i >= 1; --i) inv[i - 1] = inv[i] * i % Mod;     powm[0] = pown[0] = 1;     for (int i = 1; i <= tmp; ++i)       powm[i] = powm[i - 1] * m % Mod, pown[i] = pown[i - 1] * n % Mod;   }   long long A(int x, int y) {     if (x - y < 0 || x < 0) return 0;     return fac[x] * inv[x - y] % Mod;   }   long long C(int x, int y) {     if (x - y < 0 || x < 0 || y < 0) return 0;     return fac[x] * inv[y] % Mod * inv[x - y] % Mod;   }   int main() {     ios::sync_with_stdio(false);     cin >> n >> m >> a >> b;     init();     long long ans = 0;     for (long long i = 1; i <= n - 1; ++i) {       long long mul =           A(n - 2, i - 1) * C(m - 1, i - 1) % Mod * powm[n - i - 1] % Mod;       if (n - i - 2 >= 0) (mul *= (i + 1) * pown[n - i - 2] % Mod) %= Mod;       (ans += mul) %= Mod;     }     cout << ans << endl;     return 0;   }   