func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   const int MN = 1000010;   int exp(int x, int n) {     int ret = 1;     while (n) {       if (n & 1) ret = 1LL * ret * x % mod;       x = 1LL * x * x % mod;       n >>= 1;     }     return ret;   }   int inv(int x) { return exp(x, mod - 2); }   int fact[MN], invf[MN];   int K, W, ans;   int main() {     fact[0] = 1;     for (int i = 1; i < MN; i++) {       fact[i] = 1LL * fact[i - 1] * i % mod;     }     for (int i = 0; i < MN; i++) {       invf[i] = inv(fact[i]);     }     cin >> K >> W;     for (int i = 1; i <= min(K, W - 1); i++) {       ans += 1LL * i * fact[K] % mod * fact[K] % mod * exp(K, W - 1 - i) % mod *              invf[K - i] % mod * invf[K - i] % mod;       ans %= mod;     }     for (int i = W; i <= K; i++) {       ans += 1LL * W * fact[K] % mod * fact[K - i + W - 1] % mod * invf[K - i] %              mod * invf[K - i] % mod;       ans %= mod;     }     for (int i = 1; i <= min(K - 1, W - 2); i++) {       ans += 1LL * i * fact[K] % mod * fact[K] % mod * exp(K, W - 2 - i) % mod *              invf[K - i] % mod * invf[K - i - 1] % mod;       ans %= mod;     }     for (int i = W - 1; i <= K - 1; i++) {       ans += 1LL * (W - 1) * fact[K] % mod * fact[K - i + W - 2] % mod *              invf[K - i] % mod * invf[K - i - 1] % mod;       ans %= mod;     }     cout << ans;   }   