#include <bits/stdc++.h>
using namespace std;
#define maxsize 1000000
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
char at[maxsize / 16];
int n,x;
int isPrime(int x) {
if (!(x & 1))
if (x == 2) return 0 ;
else return 1 ;
else return (at[((x - 3) >> 1) >> 8] & (1 << (((x - 3) >> 1) & 7))) ;
}
void sieve() {
int i, j;
memset(at, 0, sizeof(at)) ;
for (i = 3; i <= maxsize; i += 2)
if (!at[((i - 3) >> 1) >> 8] & (1 << (((i - 3) >> 1) & 7)))
for (j = i * i ; j <= maxsize ; j += i + i)
at[((i - 3) >> 1) >> 8] |= (1 << (((i - 3) >> 1) & 7)) ;
}
void ss(int n){
int d=2,cnt=1,s=1;
if(!isPrime(n)) fout<<2<<" "<<n+1<<'\n';
else{
while(n>1){
int p=0;
while(n%d==0){p++,n/=d;}
cnt*=(p+1);
s*=(pow(d,p+1)-1)/(d-1);
d++;
while(isPrime(d)&&d*d<n) d++;
if(d*d>=n) d=n;
}
fout<<cnt<<" "<<s<<'\n';
}
}
int main()
{ fin>>n;
sieve();
while(n--){fin>>x;ss(x);}
return 0;
}