0pts
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f
#define re register
#define maxn 100000
#define int long long
int fac[100011],inv[100010];
int mod=0;
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
return x*f;
}
void exgcd(int a,int b,int&g,int&x,int&y)
{
if(b==0)
{
g=a,x=1,y=0;
return ;
}
exgcd(b,a%b,g,x,y);
int t=x;
x=y;
y=t-(a/b)*x;
}
int inverse(int a,int p)
{
int x,g,y;
exgcd(a,p,g,x,y);
x/=g;
p/=g;
return (x%p+p)%p;
}
void pre(int o)
{
fac[0]=1;
for(re int i=1;i<=o;i++)
fac[i]=1ll*fac[i-1]*i%mod;
inv[o]=inverse(fac[o],mod);
for(re int i=o-1;i>=0;i--)
inv[i]=inv[i+1]*(i+1)%mod;
}
int C(int m,int n)
{
return fac[m]*inv[n]%mod*inv[m-n]%mod;
}
inline int Lucas(int m,int n)
{
if(m<n) return 0;
if(m<mod) return fac[m]*inv[n]*inv[m-n]%mod;
return Lucas(m/mod,n/mod)*Lucas(m%mod,n%mod)%mod;
}
int n,m;
signed main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
// printf("%dM\n",(sizeof(dp) >> 20));
int t=read();
while(t--)
{
memset(fac,0,sizeof fac);
memset(inv,0,sizeof inv);
n=read(),m=read(),mod=read();
pre(n+m);
cout<<Lucas(n+m,n)<<'\n';
}
return 0;
}