
#include<iostream>
using namespace std;
int n;
void divide(int n)
{
for(int i=2;i<=n/i;i++)//n只会有一个大于根号n的质因数,反证如果有两个乘起来就大于n了不成立,所以我们遍历到根号n就好了,最后单独判断
{
if(n%i==0)//遍历到i说明n已经除完了2~i-1中所有的因子即此时n中无2~i-1的因子,又因为n%i==0,说明n是i的整数倍
//由n=xi => i也没有2~i-1的因子如果有的话就和前面矛盾了所有i是质因子
//也可以举例想一下前面如果用了2那么4就8就不会再被用到用了3那么9就不会用到5是质因子,6=2*3所以也不会用到 7是质因子8=2**3
{
int s=0;//存储除了几次也就是指数
while(n%i==0)//只要余数为0就一直除
{
n/=i;
s++;
}
printf("%d %d\n",i,s);
}
}
if(n>1)printf("%d %d\n",n,1);//最后除完如果n>1说明存在一个大于根号n的质因子将他输出就可以了
puts("");
}
int main()
{
cin>>n;
while(n--)
{
int x;
scanf("%d",&x);
divide(x);
}
return 0;
}