#include <algorithm>
#include <iostream>
using namespace std;
typedef struct juxing
{ int number; int lon; int wide;
}jx;
int i,j,k;
bool cmp(const jx &a, const jx &b)
{ if(a.number<b.number) return true;
else if(a.number==b.number&&a.lon<b.lon) return true;
else if(a.number==b.number&&a.lon==b.lon&&a.wide<b.wide)return true;
else return false;
}
int main()
{ jx ju[1000];
int n,m;//n组数据,m个长方形
cin>>n;
while(n--)//循环输入n组数据
{ cin>>m;
for(i=0;i<m;i++)
{
cin>>ju[i].number>>ju[i].lon>>ju[i].wide;
if(ju[i].lon<ju[i].wide)
swap(ju[i].lon,ju[i].wide); }
for(i=0;i<m;i++)
for(j=i+1;j<m;j++)
{ if(ju[i].number==ju[i+1].number&&ju[i].lon==ju[i+1].lon&&ju[i].wide==ju[i+1].wide)
{ ju[i].number=10001;
break; }
}
sort(ju,ju+m,cmp);
for(i=0;i<m;i++)
{ if(ju[i].number==10001) break;
else cout<<ju[i].number<<' '<<ju[i].lon<<' '<<ju[i].wide<<endl; }
}
return 0;}
#include <iostream>
using namespace std;
typedef struct juxing
{ int number; int lon; int wide;
}jx;
int i,j,k;
bool cmp(const jx &a, const jx &b)
{ if(a.number<b.number) return true;
else if(a.number==b.number&&a.lon<b.lon) return true;
else if(a.number==b.number&&a.lon==b.lon&&a.wide<b.wide)return true;
else return false;
}
int main()
{ jx ju[1000];
int n,m;//n组数据,m个长方形
cin>>n;
while(n--)//循环输入n组数据
{ cin>>m;
for(i=0;i<m;i++)
{
cin>>ju[i].number>>ju[i].lon>>ju[i].wide;
if(ju[i].lon<ju[i].wide)
swap(ju[i].lon,ju[i].wide); }
for(i=0;i<m;i++)
for(j=i+1;j<m;j++)
{ if(ju[i].number==ju[i+1].number&&ju[i].lon==ju[i+1].lon&&ju[i].wide==ju[i+1].wide)
{ ju[i].number=10001;
break; }
}
sort(ju,ju+m,cmp);
for(i=0;i<m;i++)
{ if(ju[i].number==10001) break;
else cout<<ju[i].number<<' '<<ju[i].lon<<' '<<ju[i].wide<<endl; }
}
return 0;}