#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
class punkt
{
public:
void zapamietaj(char *nap, int a, int b);
void wypisz();
void zamien(punkt *ptr);
void sortuj(punkt *ptr, int ile, punkt *pierw);
private:
char nazwa[10];
int x;
int y;
float przeciw;
};
int n; //Ile punktow
int p; //Ile testow
int c, d;
char nazwa[10];
int main() {
cin>>p;
for(int m=0; m<p; m++)
{
cin>>n;
punkt *poczatek;
punkt *tabpunk;
tabpunk = new punkt[n];
poczatek = tabpunk;
for(int i=0; i<n; i++)
{
cin>>nazwa>>c>>d;
tabpunk->zapamietaj(nazwa, c, d);
if(i<=n-2)
{
tabpunk ++;
}
}
tabpunk = poczatek;
tabpunk->sortuj(tabpunk, n, poczatek);
tabpunk = poczatek;
for(int i=0; i<n; i++)
{
tabpunk->wypisz();
if(i<=n-2)
{
tabpunk ++;
}
}
delete [] tabpunk;
}
return 0;
}
void punkt::zapamietaj(char *nap, int a, int b)
{
x = a;
y = b;
strcpy(nazwa, (nap ? nap: "X"));
przeciw = sqrt(pow(x,2)+pow(y,2));
}
void punkt::zamien(punkt *ptr)
{
int temp1x;
int temp1y;
float temp1przecis;
char temp1nap[10];
int temp2x;
int temp2y;
float temp2przecis;
char temp2nap[10];
temp1x = ptr->x;
temp1y = ptr->y;
temp1przecis = ptr->przeciw;
strcpy(temp1nap, (ptr->nazwa ? ptr->nazwa: "X"));
ptr++;
temp2x = ptr->x;
temp2y = ptr->y;
temp2przecis = ptr->przeciw;
strcpy(temp2nap, (ptr->nazwa ? ptr->nazwa: "X"));
ptr->x = temp1x;
ptr->y = temp1y;
ptr->przeciw = temp1przecis;
strcpy(ptr->nazwa, (temp1nap ? temp1nap: "X"));
ptr--;
ptr->x = temp2x;
ptr->y = temp2y;
ptr->przeciw = temp2przecis;
strcpy(ptr->nazwa, (temp2nap ? temp2nap: "X"));
}
void punkt::sortuj(punkt *ptr, int ile, punkt *pierw)
{
float temp;
for(int i=0; i<ile; i++)
{
for(int j=0; j<(ile-1); j++)
{
temp = ptr->przeciw;
ptr++;
if(temp > ptr->przeciw)
{
ptr--;
zamien(ptr);
ptr++;
}
}
ptr = pierw;
}
}
void punkt::wypisz()
{
cout<<nazwa<<' '<<x<<' '<<y<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgcHVua3QKewpwdWJsaWM6CiAgICB2b2lkIHphcGFtaWV0YWooY2hhciAqbmFwLCBpbnQgYSwgaW50IGIpOwogICAgdm9pZCB3eXBpc3ooKTsKICAgIHZvaWQgemFtaWVuKHB1bmt0ICpwdHIpOwogICAgdm9pZCBzb3J0dWoocHVua3QgKnB0ciwgaW50IGlsZSwgcHVua3QgKnBpZXJ3KTsKCnByaXZhdGU6CiAgICBjaGFyIG5hendhWzEwXTsKICAgIGludCB4OwogICAgaW50IHk7CiAgICBmbG9hdCBwcnplY2l3Owp9OwoKCmludCBuOyAvL0lsZSBwdW5rdG93CmludCBwOyAvL0lsZSB0ZXN0b3cKCmludCBjLCBkOwpjaGFyIG5hendhWzEwXTsKCmludCBtYWluKCkgewoJCiAgIGNpbj4+cDsKICAgIGZvcihpbnQgbT0wOyBtPHA7IG0rKykKICAgIHsKCiAgICBjaW4+Pm47CgoKICAgIHB1bmt0ICpwb2N6YXRlazsKICAgIHB1bmt0ICp0YWJwdW5rOwogICAgdGFicHVuayA9IG5ldyBwdW5rdFtuXTsKICAgIHBvY3phdGVrID0gdGFicHVuazsKCiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspCiAgICB7CiAgICAgICAgY2luPj5uYXp3YT4+Yz4+ZDsKICAgICAgICB0YWJwdW5rLT56YXBhbWlldGFqKG5hendhLCBjLCBkKTsKICAgICAgICBpZihpPD1uLTIpCiAgICAgICAgewogICAgICAgIHRhYnB1bmsgKys7CiAgICAgICAgfQogICAgfQoKICAgIHRhYnB1bmsgPSBwb2N6YXRlazsKICAgIHRhYnB1bmstPnNvcnR1aih0YWJwdW5rLCBuLCBwb2N6YXRlayk7CiAgICB0YWJwdW5rID0gcG9jemF0ZWs7CgogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKQogICAgewogICAgICAgIHRhYnB1bmstPnd5cGlzeigpOwogICAgICAgIGlmKGk8PW4tMikKICAgICAgICB7CiAgICAgICAgdGFicHVuayArKzsKICAgICAgICB9CiAgICB9CiAgICAgICAgIGRlbGV0ZSBbXSB0YWJwdW5rOwogICAgfQoKCglyZXR1cm4gMDsKfQoKdm9pZCBwdW5rdDo6emFwYW1pZXRhaihjaGFyICpuYXAsIGludCBhLCBpbnQgYikKewogICAgeCA9IGE7CiAgICB5ID0gYjsKICAgIHN0cmNweShuYXp3YSwgKG5hcCA/IG5hcDogIlgiKSk7CiAgICBwcnplY2l3ID0gc3FydChwb3coeCwyKStwb3coeSwyKSk7Cn0KCnZvaWQgcHVua3Q6OnphbWllbihwdW5rdCAqcHRyKQp7CiAgICBpbnQgdGVtcDF4OwogICAgaW50IHRlbXAxeTsKICAgIGZsb2F0IHRlbXAxcHJ6ZWNpczsKICAgIGNoYXIgdGVtcDFuYXBbMTBdOwoKICAgIGludCB0ZW1wMng7CiAgICBpbnQgdGVtcDJ5OwogICAgZmxvYXQgdGVtcDJwcnplY2lzOwogICAgY2hhciB0ZW1wMm5hcFsxMF07CgogICAgdGVtcDF4ID0gcHRyLT54OwogICAgdGVtcDF5ID0gcHRyLT55OwogICAgdGVtcDFwcnplY2lzID0gcHRyLT5wcnplY2l3OwogICAgc3RyY3B5KHRlbXAxbmFwLCAocHRyLT5uYXp3YSA/IHB0ci0+bmF6d2E6ICJYIikpOwoKICAgIHB0cisrOwoKICAgIHRlbXAyeCA9IHB0ci0+eDsKICAgIHRlbXAyeSA9IHB0ci0+eTsKICAgIHRlbXAycHJ6ZWNpcyA9IHB0ci0+cHJ6ZWNpdzsKICAgIHN0cmNweSh0ZW1wMm5hcCwgKHB0ci0+bmF6d2EgPyBwdHItPm5hendhOiAiWCIpKTsKCiAgICBwdHItPnggPSB0ZW1wMXg7CiAgICBwdHItPnkgPSB0ZW1wMXk7CiAgICBwdHItPnByemVjaXcgPSB0ZW1wMXByemVjaXM7CiAgICBzdHJjcHkocHRyLT5uYXp3YSwgKHRlbXAxbmFwID8gdGVtcDFuYXA6ICJYIikpOwoKICAgIHB0ci0tOwoKICAgIHB0ci0+eCA9IHRlbXAyeDsKICAgIHB0ci0+eSA9IHRlbXAyeTsKICAgIHB0ci0+cHJ6ZWNpdyA9IHRlbXAycHJ6ZWNpczsKICAgIHN0cmNweShwdHItPm5hendhLCAodGVtcDJuYXAgPyB0ZW1wMm5hcDogIlgiKSk7Cgp9Cgp2b2lkIHB1bmt0Ojpzb3J0dWoocHVua3QgKnB0ciwgaW50IGlsZSwgcHVua3QgKnBpZXJ3KQp7CiAgICBmbG9hdCB0ZW1wOwoKICAgIGZvcihpbnQgaT0wOyBpPGlsZTsgaSsrKQogICAgewogICAgICAgIGZvcihpbnQgaj0wOyBqPChpbGUtMSk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHRlbXAgPSBwdHItPnByemVjaXc7CiAgICAgICAgICAgIHB0cisrOwogICAgICAgICAgICBpZih0ZW1wID4gcHRyLT5wcnplY2l3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwdHItLTsKICAgICAgICAgICAgICAgIHphbWllbihwdHIpOwogICAgICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHRyID0gcGllcnc7CiAgICB9Cn0KCnZvaWQgcHVua3Q6Ond5cGlzeigpCnsKICAgIGNvdXQ8PG5hendhPDwnICc8PHg8PCcgJzw8eTw8ZW5kbDsKfQ==