2020-04-10 22:39:17 +00:00
|
|
|
constexpr ll MOD = 1e9+7;
|
|
|
|
|
2020-04-26 22:03:23 +00:00
|
|
|
int fact[200002] = { 1 }, ifact[200002] = { 1 };
|
|
|
|
|
2020-04-10 22:50:52 +00:00
|
|
|
int pw(int base, int exp) {
|
2020-04-10 22:39:17 +00:00
|
|
|
int res = 1;
|
|
|
|
while (exp) {
|
2020-04-10 22:50:52 +00:00
|
|
|
if (exp & 1) res = (ll)base * res % MOD;
|
2020-04-10 22:39:17 +00:00
|
|
|
exp >>= 1;
|
2020-04-10 22:50:52 +00:00
|
|
|
base = (ll)base * base % MOD;
|
2020-04-10 22:39:17 +00:00
|
|
|
}
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
2020-04-10 22:50:52 +00:00
|
|
|
int inv(int x) { return pw(x, MOD - 2); }
|
2020-04-26 22:03:23 +00:00
|
|
|
|
|
|
|
int nCr(int n, int k) { return (ll)fact[n] * ifact[k] % MOD * ifact[n - k] % MOD; }
|
|
|
|
|
|
|
|
for (int i = 0; i < n; ++i) {
|
|
|
|
fact[i + 1] = (i + 1ll) * fact[i] % MOD;
|
|
|
|
ifact[i + 1] = inv(fact[i + 1]);
|
|
|
|
}
|