func_code_string: #include <bits/stdc++.h>   using namespace std;   long long cd, w, a, b, kq = 0, mod = 1e9 + 7, fact[1000001], sf[1000001],                          p[1000001];   void inp() { cin >> cd >> w >> a >> b; }   long long bigmod(long long hat, long long base) {     if (hat == 0) return 1;     long long k = bigmod(hat / 2, base);     if (hat % 2 == 1) return k * k % mod * base % mod;     return k * k % mod;   }   void create() {     p[0] = fact[0] = sf[0] = 1;     for (long long i = 1; i <= 1000000; i++) {       fact[i] = fact[i - 1] * i % mod;       sf[i] = bigmod(mod - 2, fact[i]);       p[i] = p[i - 1] * w % mod;     }   }   long long C(long long k, long long n) {     if (k > n) return 0;     return fact[n] * sf[k] % mod * sf[n - k] % mod;   }   long long A(long long k, long long n) {     if (k > n) return 0;     return C(k, n) * fact[k] % mod;   }   long long cayley(long long k, long long n) {     if (n == k) return 1;     return k * bigmod(n - k - 1, n) % mod;   }   long long get(long long node) {     return A(node, cd - 2) * cayley(node + 2, cd) % mod * p[cd - node - 2] % mod *            C(node, w - 1) % mod;   }   void do_it() {     create();     for (long long i = 0; i <= cd - 2; i++) kq += get(i), kq %= mod;     cout << kq;   }   int main() {     inp();     do_it();   }   