int Power(int q, int n, int p) {
if (n == 0)return 1 % p;
return Power(q * q % p, n / 2, p) % p * (n & 1 ? q : 1) % p;
}
int Factorial(int n, int p) {
if (n >= p)return 0;
if (n == 0)return 1;
return Factorial(n - 1, p) * n % p;
}
int Reverse_Factorial(int n, int p) {
if (n >= p)return 0;
if (n == 0)return 1;
return Power(Factorial(n, p), p - 2, p) % p;
}
int C(int n, int m, int p) {
if (m > n)return 0;
return Factorial(n, p) % p * Reverse_Factorial(n - m, p) % p * Reverse_Factorial(m, p) % p;
}
int Lucas(int n, int m, int p) {
if (n == 0 && m == 0)return 1;
return C(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}