/*
program: sorotwanie punktow
date:25.10.2016
author: kyubu
version 2.0
*/
#include <iostream>
#include <math.h>
using namespace std;
struct punkt
{
public:
int odleglosc,x,y;
string nazwa;
};
int main()
{
int t; // liczba przypadkow
cin >> t;
for(int z=0;z<t;z++)
{
int n; //liczba punktow
cin >> n;
punkt * tablica = new punkt [n];
for (int x=0;x<n;x++)
{
cin>>tablica[x].nazwa>>tablica[x].x>>tablica[x].y;
if(tablica[x].x==0) tablica[x].odleglosc=tablica[x].y;
else if(tablica[x].y==0) tablica[x].odleglosc=tablica[x].x;
else tablica[x].odleglosc=sqrt(pow(tablica[x].x,2)*pow(tablica[x].y,2));
}
//sortowanie bÄ…belkowe
int sort=1;
while(sort>0)
{
sort=0;
for (int x=0;x<n;x++)
{
if(tablica[x].odleglosc>tablica[x+1].odleglosc && x+1<n)
{
punkt temp;
temp=tablica[x];
tablica[x]=tablica[x+1];
tablica[x+1]=temp;
sort++;
}
}
}
//prezentacja
for (int x=0;x<n;x++)
{
cout<<tablica[x].nazwa<<' '<<tablica[x].x<<' '<<tablica[x].y<<endl;
}
cout<<endl;
}
return 0;
}
ICAgIC8qCiAgICBwcm9ncmFtOiBzb3JvdHdhbmllIHB1bmt0b3cKICAgIGRhdGU6MjUuMTAuMjAxNgogICAgYXV0aG9yOiBreXVidQogICAgdmVyc2lvbiAyLjAKICAgICovCiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8bWF0aC5oPgogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgICBzdHJ1Y3QgcHVua3QKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICBpbnQgb2RsZWdsb3NjLHgseTsKICAgICAgICBzdHJpbmcgbmF6d2E7CgogICAgfTsKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBpbnQgdDsgLy8gbGljemJhIHByenlwYWRrb3cKICAgICAgICBjaW4gPj4gdDsKICAgICAgICBmb3IoaW50IHo9MDt6PHQ7eisrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG47IC8vbGljemJhIHB1bmt0b3cKICAgICAgICAgICAgY2luID4+IG47CiAgICAgICAgICAgIHB1bmt0ICogdGFibGljYSA9IG5ldyBwdW5rdCBbbl07CiAgICAgICAgICAgIGZvciAoaW50IHg9MDt4PG47eCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaW4+PnRhYmxpY2FbeF0ubmF6d2E+PnRhYmxpY2FbeF0ueD4+dGFibGljYVt4XS55OwogICAgICAgICAgICAgICAgaWYodGFibGljYVt4XS54PT0wKSB0YWJsaWNhW3hdLm9kbGVnbG9zYz10YWJsaWNhW3hdLnk7CiAgICAgICAgICAgICAgICBlbHNlIGlmKHRhYmxpY2FbeF0ueT09MCkgdGFibGljYVt4XS5vZGxlZ2xvc2M9dGFibGljYVt4XS54OwogICAgICAgICAgICAgICAgZWxzZSB0YWJsaWNhW3hdLm9kbGVnbG9zYz1zcXJ0KHBvdyh0YWJsaWNhW3hdLngsMikqcG93KHRhYmxpY2FbeF0ueSwyKSk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vc29ydG93YW5pZSBixIViZWxrb3dlCiAgICAgICAgICAgIGludCBzb3J0PTE7CiAgICAgICAgICAgIHdoaWxlKHNvcnQ+MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc29ydD0wOwogICAgICAgICAgICAgICAgZm9yIChpbnQgeD0wO3g8bjt4KyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYodGFibGljYVt4XS5vZGxlZ2xvc2M+dGFibGljYVt4KzFdLm9kbGVnbG9zYyAmJiB4KzE8bikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1bmt0IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXA9dGFibGljYVt4XTsKICAgICAgICAgICAgICAgICAgICAgICAgdGFibGljYVt4XT10YWJsaWNhW3grMV07CiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxpY2FbeCsxXT10ZW1wOwogICAgICAgICAgICAgICAgICAgICAgICBzb3J0Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vcHJlemVudGFjamEKICAgICAgICAgICAgZm9yIChpbnQgeD0wO3g8bjt4KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQ8PHRhYmxpY2FbeF0ubmF6d2E8PCcgJzw8dGFibGljYVt4XS54PDwnICc8PHRhYmxpY2FbeF0ueTw8ZW5kbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDxlbmRsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0K