#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 2*1e5+5, INF = 4e18+9, mod = 1e9+7;
vector<ll> fact, invfact;
ll binpow(ll a, ll b){
    ll res = 1;
    while(b > 0){
        if(b&1){
            res*=a;
            res%=mod;
        }
        a*=a;
        a%=mod;
        b/=2;
    }
    return res;
}
ll modinv(ll x){
    return binpow(x, mod-2);
}
void calcfact(int n){
    fact.resize(n+1, 0);
    invfact.resize(n+1, 0);
    fact[0] = 1;
    for(int i = 1; i <= n; i++){
        fact[i] = fact[i-1]*i;
        fact[i]%=mod;
    }
    invfact[n] = modinv(fact[n]);
    for(int i = n-1; i >= 0; i--){
        invfact[i] = invfact[i+1]*(i+1)%mod;
    }
}
ll nCk(ll n, ll k){
    if(k < 0 || k > n) return 0;
    return fact[n]*(invfact[k]*invfact[n-k]%mod)%mod;
}
ll distributing_apples(ll n, ll m){ // number of people, apple
    return nCk(m+n-1, n-1);
}
void solve(){
    calcfact(2e5);
    int n, k;
    cin >> n >> k;
    k--;
    ll ans = 0;
    for(int i = 0; i <= k; i++){
        ans += (binpow(-1, i) * nCk(n+1, i) + mod) % mod * (binpow(k+1-i, n) + mod) % mod;
    }
    ans %= mod;
    cout << ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    solve();
}
| # | 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... |