#include<bits/stdc++.h>
using namespace std;
bool book[100005];
int prime[100005],p,q;
long long g[100005],faci[100005],gt2[100005],cnt,mu[100005],fac[100005],inv[1000005];
long long inv_g[100005],inv_gt2[100005],phi[100005];
long long fpow(long long a,long long b){
long long ans=1;
while(b){
if(b&1)ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans%p;
}
void init(){
mu[1]=book[1]=g[1]=1;
inv[1]=1;
for(int i=2;i<=100000;i++)inv[i]=(p-p/i)*inv[p%i]%p;
for(int i=2;i<=100000;i++){
g[i]=1;
if(!book[i]){
mu[i]=-1;
phi[i]=i-1;
prime[++cnt]=i;
}
for(int j=1;prime[j]*i<=100000&&j<=cnt;j++){
book[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
mu[i*prime[j]]=0;
break;
}else {
phi[i*prime[j]]=phi[i]*phi[prime[j]];
mu[i*prime[j]]=-mu[i];
}
}
}
for(int i=1;i<=100000;i++)phi[i]=(phi[i-1]+phi[i]);
fac[0]=1;
faci[0]=1;
for(int i=1;i<=100000;i++){
fac[i]=1ll*fac[i-1]*i%p;
faci[i]=faci[i-1]*fpow(i,i)%p;
}
for(int i=1;i<=100000;i++){
if(!mu[i])continue;
for(int j=1;j*i<=100000;j++)g[j*i]=g[j*i]*(mu[i]==1? j:inv[j])%p;
}
for(int i=1;i<=100000;i++)gt2[i]=fpow(g[i],1ll*i*i%(p-1));
for(int i=2;i<=100000;i++)gt2[i]=gt2[i]*gt2[i-1]%p;
g[0]=1;
for(int i=2;i<=100000;i++)g[i]=g[i-1]*g[i]%p;
inv_g[0]=1;
inv_gt2[0]=1;
for(int i=1;i<=100000;i++){
inv_g[i]=fpow(g[i],p-2);
inv_gt2[i]=fpow(gt2[i],p-2);
}
}
long long gi0(int a,int b,int c){
return fpow(fac[a],1ll*b*c%(p-1));
}
long long ggc0(int a,int b,int c){
long long ans=1;
int l=1;
if(a>b)swap(a,b);
while(l<=a){
int r;
if(b/l==0||a/l==0)r=a;
else r=min(b/(b/l),a/(a/l));
ans=ans*(fpow(g[r]*inv_g[l-1]%p,1ll*(b/l)*(a/l)%(p-1)))%p;
l=r+1;
}
return fpow(ans,c);
}
long long S(int x){
return 1ll*x*(x+1)/2;
}
long long gi1(int a,int b,int c){
return fpow(faci[a],(1ll*S(b)%(p-1)*(S(c)%(p-1)))%(p-1));
}
long long ggc1(int a,int b,int c){
long long ans=1;
int l=1;
if(a>b)swap(a,b);
while(l<=a){
int r;
if(b/l==0||a/l==0)r=a;
else r=min(b/(b/l),a/(a/l));
ans=ans*(fpow(gt2[r]*inv_gt2[l-1]%p,1ll*S(b/l)%(p-1)*S(a/l)%(p-1)))%p;
l=r+1;
}
return fpow(ans,S(c)%(p-1));
}
long long gi2(int a,int b,int c){
int l=1;
long long ans=1;
while(l<=min(a,min(b,c))){
int r;
if(a/l==0||b/l==0||c/l==0)r=a;
else r=min(a/(a/l),min(b/(b/l),c/(c/l)));
ans=ans*(fpow(fac[a/l],(1ll*(phi[r]-phi[l-1])%(p-1)*(b/l)%(p-1)*(c/l)%(p-1))))%p;
l=r+1;
}
}
long long ggc2(int a,int b,int c){
long long ans=1;
int l=1;
while(l<=min(a,min(b,c))){
int r;
if(a/l==0||b/l==0||c/l==0)r=a;
else r=min(a/(a/l),min(b/(b/l),c/(c/l)));
ans=ans*fpow(ggc0(a/l,b/l,c/l)%p,1ll*(phi[r]-phi[l-1])%(p-1));
l=r+1;
}
return ans;
}
long long ft0(int a,int b,int c){
return gi0(a,b,c)*gi0(b,a,c)%p*fpow(ggc0(a,b,c)*ggc0(a,c,b)%p,p-2)%p;
}
long long ft1(int a,int b,int c){
return gi1(a,b,c)*gi1(b,a,c)%p*fpow(ggc1(a,b,c)*ggc1(a,c,b)%p,p-2)%p;
}
long long ft2(int a,int b,int c){
return gi2(a,b,c)*gi2(b,a,c)%p*fpow(ggc2(a,b,c)*ggc2(a,c,b)%p,p-2)%p;
}
int main(){
cin>>q>>p;
init();
while(q--){
int a,b,c;
cin>>a>>b>>c;
cout<<ft0(a,b,c)<<" "<<ft1(a,b,c)<<" "<<ft2(a,b,c)<<endl;
}
}