#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 看书学叉积 极角排序 巧妙 背
//叉积 在这里θ表示两向量之间的夹角
struct nod{
double x;
double y;
int index;
nod operator -(const nod b)const
{
return (nod){x-b.x, y-b.y, 0};
}
//叉积
double operator ^ (const nod b)const//抄博友程序 背 博友有类外定义的
{
return x*b.y-y*b.x;
}
//点积
double operator * (const nod b)const
{
return x*b.x+y*b.y;//背 知识
}
};
int sgn(double x)//抄博友程序
{
if(fabs(x)<1e-8)//包含0
{
return 0;
}else if(x<0)
{
return -1;
}else
{
return 1;
}
}
//两点间距离
double dist(nod a,nod b)
{
return sqrt((a-b)*(a-b));//抄博友程序 背
}
int pos;
nod p[100];
bool cmp(nod a,nod b)
{
double tmp=(a-p[pos])^(b-p[pos]);//巧妙
int t=sgn(tmp);
if(t==0)
{
return dist(a,p[pos])<dist(b,p[pos]);//重要
}else if(t==-1)
{
return false;
}else
{
return true;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>p[i].index>>p[i].x>>p[i].y;
if(p[i].y<p[0].y || (p[i].y==p[0].y && p[i].x<p[0].x))//背
{
swap(p[i],p[0]);
}
}
pos=0;
for(int i=1;i<n;i++)
{
sort(p+i,p+n,cmp);//重要 巧妙
pos++;
}
cout<<n;
for(int i=0;i<n;i++)
{
cout<<" "<<p[i].index;
}
cout<<endl;
}
return 0;
}