RT
#include<iostream>
using namespace std;
#define N 100005
typedef long long LL;
long long fact[N],infact[N];
long long n,m,p;
long long C(LL n,LL m,LL p){
if(m > n) return 0;
return (LL)fact[n] * infact[n - m] % p * infact[m] % p;
}
LL KSM(LL x,LL n,LL mod){//求逆元
LL sum = 1;
while(n){
if(n & 1)sum = sum * x % mod;
x = x * x % mod;
n >>= 1;
}
return sum % mod;
}
LL Lucas(long long n,long long m,long long p){//递归版LUCAS
if(n < m) return 0;
if(n < p) return fact[n] * infact[n - m] % p * infact[m] % p;
return C(n % p,m % p,p) * Lucas(n / p,m / p,p) % p;
}
int main(){
int T;
for(scanf("%d",&T);T;T--){
scanf("%lld%lld%lld",&n,&m,&p);
fact[0] = fact[0] = 1;
infact[1] = fact[1] = 1;//初始化
for(int i = 2;i <= p;i++){
fact[i] = fact[i - 1] % p;
infact[i] = infact[i - 1] * KSM(i,p - 2,p) % p;
}
printf("%lld\n",Lucas(n + m,n,p)%p);
}
return 0;
}