#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 100000+10
#define ll long long
#define pb push_back
#define ft first
#define sc second
#define mp make_pair
#define pil pair<int,ll>
using namespace std;
int n,m,p;
ll fac[MAXN],inv[MAXN],finv[MAXN];
ll Pow(ll x,ll p,ll MOD){
ll ret=1;
while(p){
if(p&1){(ret*=x)%=MOD;}
(x*=x)%=MOD;
p>>=1;
}
return ret;
}
ll ni(ll x){
return Pow(x,p-2,p);
}
ll C(int n,int m){
if(m>n)return 0;
return fac[n]*ni(fac[m])*ni(fac[n-m])%p;
}
ll lucas(int n,int m){
ll ret=1;
while(n>=p||m>=p){
if(!m)return ret;
int t1=n%p,t2=m%p;
if(t1<t2)return 0;
(ret*=C(t1,t2))%=p;
n/=p,m/=p;
}
return ret*C(n,m)%p;
}
void solve(){
scanf("%d%d%d",&n,&m,&p);
fac[0]=fac[1]=1;
// finv[0]=finv[1]=1;
// inv[1]=1;
for(int i=2;i<=p;i++){
fac[i]=fac[i-1]*i%p;
// inv[i]=p-(inv[p%i]*(p/i)%p);
// finv[i]=finv[i-1]*inv[i]%p;
}
printf("%lld\n",lucas(n+m,m));
}
int main()
{
// freopen("data.in","r",stdin);
int T;
scanf("%d",&T);
while(T--){
solve();
}
return 0;
}