int qrsort(int a[],int p,int r) { int q ; if(p<r) { q = patti(a,p,r); qrsort(a,p,q-1); qrsort(a,q+1,r);} }
void qrsort( long long a[],int p,int r) { int q ; if(p<r) { q = patti(a,p,r); qrsort(a,p,q-1); qrsort(a,q+1,r);} }
int main() { long long a[3]; int p,r,i,t; long long k; scanf("%d",&t); while(t--){ for (i=0;i<3;i++) scanf("%lld",&a[i]); qrsort(a,0,2); k=((((a[0]%MOD)*((a[1]-1)%MOD))%MOD)*((a[2]-2)%MOD))%MOD; printf("%lld\n",k); } return 0;}
int main() { int flag,t,j; scanf("%d",&t); char buff[size]; int read; while(t--) { int arr[100003]={0}; int arr2[100005][2],arr3[100007],N,gg,M,i,k,c,s,f=1; scanf("%d%d",&N,&M); read =fread(buff,1,size,stdin); for(i=0;i<read;i++) { if(arr[arr2[i][0]]||arr[arr2[i][1]]) { if(arr[arr2[i][0]]) arr[arr2[i][1]]=arr[arr2[i][0]]; else arr[arr2[i][0]]=arr[arr2[i][1]]; } else {arr[arr2[i][0]]=(i+1); arr[arr2[i][1]]=(i+1); } } qrsort(arr,1,N); for(i=1;i<=N;i++) printf("%d ",arr[i]); k=1; c=1; flag=0; i=1; while(arr[i]==0) { arr3[f++]=1; i++; } s=arr[i]; for(i=i+1;i<=N;i++) { if(s==arr[i]) {k++; flag=1; } else { flag=0; arr3[f++]=k; } if(flag==0) {s=arr[i]; k=1; }} arr3[f]=k; for(i=1;i<=f;i++) { //printf("\n%d ",arr3[i]); c=c*arr3[i]%MOD; } printf("%d %d\n",f,c); } return 0; }