/*
分析:
2^31-1很大,不过sqrt后就不大了。
2012-11-12
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
struct A
{
int num;
char name[50];
}E[1011];
int num[70001];
int cmp(const void *a,const void *b)
{
struct A *c,*d;
c=(struct A *)a;
d=(struct A *)b;
return strcmp(c->name,d->name);
}
void getprime()
{
int i,l;
memset(num,-1,sizeof(num));
num[0]=num[1]=0;
for(i=2;i<=70000;i++)
{
if(num[i])
{
for(l=2*i;l<=70000;l+=i)
{
num[l]=0;
}
}
}
}
int main()
{
int T;
int n;
int i,l;
int t,pre;
int temp,base,ans;
getprime();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%s%d",E[i].name,&E[i].num);
qsort(E,n,sizeof(E[0]),cmp);
ans=-1;
base=-1;
for(i=0;i<n;i++)
{
t=(int)sqrt((double)E[i].num);
temp=0;
pre=-1;
for(l=2;l<=t;l++)
{
if(E[i].num%l==0)
{
if(l!=pre && num[l]) {temp++;pre=l;}
E[i].num/=l;
t=(int)sqrt((double)E[i].num);
l--;
}
}
if(E[i].num>1 && E[i].num!=pre) temp++;
if(temp>base) {base=temp;ans=i;}
}
printf("%s\n",E[ans].name);
}
return 0;
}