#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
const int maxn = 2e6+5;
ll fac[maxn],inv[maxn];//储存除模后的阶乘和逆元的值
ll quickpow(ll m,ll n,ll k)// 快速幂return m^n % k
{
ll b = 1;
m = m%k;
while (n > 0)
{
if (n & 1)
b = (b*m)%k;
n = n >> 1 ;
m = (m*m)%k;
}
return b;
}
ll C(ll n, ll m)//计算组合数
{
return (((fac[n] * inv[m])%mod) * inv[n-m]) % mod;
}
void init()//初始化
{
fac[0] = 1;
for(int i = 1; i<=maxn-2; i++)
fac[i] = (i*fac[i-1])%mod;
inv[maxn-2] = quickpow(fac[maxn-2],mod-2,mod);
for(int i = maxn - 3; i>=0; i--)
inv[i] = ( (i+1) * inv[i+1] ) % mod;
}