



/// tổ hợp vs prime modulo:
long long fct[maxn],inv[maxn],ivf[maxn];
void bornfact()
{
fct[0] = ivf[0] = 1;
fct[1] = ivf[1] = inv[1] = 1;
for (int i=2;i<maxn; i++)
{
fct[i] = fct[i - 1] * i % MOD;
inv[i] = MOD - MOD / i * inv[MOD % i] % MOD;
ivf[i] = ivf[i - 1] * inv[i] % MOD;
}
}
long long A(const int &n,const int &k)
{
return (n<k)?0:fct[n] % MOD * ivf[n - k] % MOD;
}
long long C(const int &n,const int &k)
{
return (n<k)?0:fct[n] % MOD * ivf[k] % MOD * ivf[n - k] % MOD;
}
long long P(const int &n)
{
return fct[n];
}