func_code_string: #include <bits/stdc++.h>   const int maxn = 1000010;   const int P = 1000000007;   int k, w;   int f[maxn], g[maxn];   int pow(int x, int y) {     int e = 1;     while (y) {       if (y & 1) e = (long long)e * x % P;       x = (long long)x * x % P;       y >>= 1;     }     return e;   }   int main() {     int i, d, t, s = 0;     scanf( %d%d , &k, &w);     for (f[0] = g[0] = 1, i = 1; i <= k; ++i)       f[i] = (long long)f[i - 1] * i % P, g[i] = pow(f[i], P - 2);     for (t = 1; t <= k; ++t) {       d = (long long)f[k] * g[k - t] % P * g[k - t] % P;       if (t <= w - 1)         s = ((long long)d * t % P * f[k] % P * pow(k, w - t - 1) + s) % P;       else         s = ((long long)d * w % P * f[k - t + w - 1] + s) % P;     }     for (t = 1; t < k; ++t) {       d = (long long)f[k] * g[k - t] % P * g[k - t - 1] % P;       if (t + 1 <= w - 1)         s = ((long long)d * t % P * f[k] % P * pow(k, w - t - 2) + s) % P;       else         s = ((long long)d * (w - 1) % P * f[k - t + w - 2] + s) % P;     }     printf( %d , s);     return 0;   }   