
/*==================================================*\ | 求解 C(n,m)%p 保证p为素数n很大10^9 m很小10^5 \*==================================================*/ typedef __int64 int64; int64 N,M, mod; int64 p[MM]; void get_data() { int i,j,k; scanf("%I64d%I64d%I64d",&N,&M,&mod); } int64 exp_mod(int64 a,int64 b,int64 p) { int64 res=1; while(b) { if(b&1) { res=(res*a)%p; } b>>=1; a=(a*a)%p; } return res; } int64 com(int64 n,int64 m,int64 p) { int64 a=1,b,i; if(n<m) return 0; for(i=1;i<=m;i++) { a=(a*(n-i+1))%p; b=exp_mod(i,p-2,p); a=(a*b)%p; } return a; } int64 Lucas(int64 n,int64 m,int64 p) { int64 res=1; if(n<m) return 0; while(n && m) { res=(res*com(n%p,m%p,p))%p; n/=p, m/=p; } return res; } //100 100 2 void solve() { int i,j,k; printf("%I64d\n",Lucas(N,M,mod)); } int main() { int ca; scanf("%d",&ca); while(ca--) get_data(),solve(); return 0; }