#include<stdio.h>
typedef long long ll;
ll ans,maxsum,n;
int p[20]={1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
void dfs(ll num,ll k,ll sum,ll limits)
{
//num表示当前枚举到的数
//k表示枚举到的第k大的质因子
//sum表示该数的约数个数
//limits表示质因子个数上限
ll i,temp;
if(sum>maxsum)
{
maxsum=sum;
ans=num;//如果当前的数的约数个数更多,则更新当前数
}
if(sum==maxsum && num<ans)
ans=num;//如果约数个数相同,将最优解更新为较小的数;
if(k>15)
return;
temp=num;
for(i=1;i<=limits;i++)
{
if(temp*p[k]/p[k]!=temp || temp*p[k]>n)//temp*a[k]/a[k]!=temp的条件是为了防止爆long long
break;
temp=temp*p[k];
dfs(temp,k+1,sum*(i+1),i);//继续下一步搜索
}
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
ans=maxsum=0;
scanf("%lld",&n);
dfs(1,1,1,50);
printf("%lld %lld\n",ans,maxsum);
}
}