func_code_string: #include <bits/stdc++.h>   using namespace std;   void err(istream_iterator<string> it) { cerr << endl; }   template <typename T, typename... Args>   void err(istream_iterator<string> it, T a, Args... args) {     cerr << *it <<   =   << a <<   ,  ;     err(++it, args...);   }   namespace fastIO {   bool IOerror = 0;   inline char nc() {     static char buf[100000], *p1 = buf + 100000, *pend = buf + 100000;     if (p1 == pend) {       p1 = buf;       pend = buf + fread(buf, 1, 100000, stdin);       if (pend == p1) {         IOerror = 1;         return -1;       }     }     return *p1++;   }   inline bool blank(char ch) {     return ch ==     || ch ==   n  || ch ==   r  || ch ==   t ;   }   inline void read(int &x) {     char ch;     while (blank(ch = nc()))       ;     if (IOerror) return;     for (x = ch -  0 ; (ch = nc()) >=  0  && ch <=  9 ; x = x * 10 + ch -  0 )       ;   }   }  // namespace fastIO   using namespace fastIO;   const double PI = acos(-1.0);   const double eps = 1e-8;   const int maxn = 2e6 + 7;   const long long mod = 1e9 + 7;   long long fac[maxn], finv[maxn];   long long qp(long long b, long long n) {     long long r = 1;     if (n <= 0) n += mod - 1;     b %= mod;     for (; n; n >>= 1, b = b * b % mod)       if (n & 1) r = r * b % mod;     return r;   }   long long pw[maxn];   void init() {     fac[1] = fac[0] = finv[0] = 1;     for (int i = 2; i < maxn; ++i) fac[i] = fac[i - 1] * i % mod;     finv[maxn - 1] = qp(fac[maxn - 1], mod - 2);     for (int i = maxn - 2; i >= 1; --i) finv[i] = finv[i + 1] * (i + 1) % mod;   }   long long C(int n, int m) {     return n >= m ? fac[n] * finv[n - m] % mod * finv[m] % mod : 0;   }   long long A(int n, int m) { return n >= m ? fac[n] * finv[n - m] % mod : 0; }   int main() {     int n, m, a, b;     cin >> n >> m >> a >> b;     init();     long long res = 0;     pw[0] = 1;     for (int i = 1; i < maxn; ++i) pw[i] = pw[i - 1] * m % mod;     for (int i = 0; i <= n - 2; ++i) {       long long tmp = A(n - 2, i) * C(m - 1, i) % mod * pw[n - 2 - i] % mod *                       (i + 2) % mod * qp(n, n - i - 3) % mod;       res = (res + tmp) % mod;     }     cout << res << endl;   }   