#include <bits/stdc++.h>
using namespace std ;
#define ll long long
#define is ==
#define isnt !=
#define wnsl '\n'
const ll mod = 1000000007 ;
ll modpow (ll a, ll e) {
a %= mod ;
ll r = 1 ;
while (e > 0) {
if (e & 1) r = (r * a) % mod ;
a = (a * a) % mod ;
e >>= 1 ;
}
return r ;
}
ll modinv (ll a) {
return modpow (a, mod - 2) ;
}
int main () {
ios::sync_with_stdio (false) ;
cin.tie (nullptr) ;
ll N, K ;
cin >> N >> K ;
vector<ll> fact (N + 2), invfact (N + 2) ;
fact[0] = 1 ;
for (ll i = 1; i <= N + 1; i++) fact[i] = (fact[i - 1] * i) % mod ;
invfact[N + 1] = modinv (fact[N + 1]) ;
for (ll i = N + 1; i >= 1; i--) invfact[i - 1] = (invfact[i] * i) % mod ;
auto C = [&] (ll n, ll r) -> ll {
if (r < 0 or r > n) return 0 ;
return (((fact[n] * invfact[r]) % mod) * invfact[n - r]) % mod ;
} ;
ll ans = 0 ;
for (ll j = 0; j <= K; j++) {
ll comb = C (N + 1, j) ;
ll base = K - j ;
ll pw = modpow (base, N) ;
ll term = (comb * pw) % mod ;
if (j & 1) ans = (ans - term + mod) % mod ;
else ans = (ans + term) % mod ;
}
cout << ans << wnsl ;
return 0 ;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |