#include <fstream>
#include <iostream>
using namespace std;
long long div=1,sum=1,pos=1;
int primes[80005];
bool sieve[1000005];
void getsieve()
{
primes[0]=2;
sieve[0] = 1;
sieve[1] = 1;
int i,j;
for(i=4; i*i<=1000000; i+=2)
sieve[i]=1;
for(i=3; i*i<=1000000; i+=2) // start from 3 since only prime even is 2
if(sieve[i]==0)
{
primes[pos]=i; // generate primes vector
++pos;
for(j=i+i; j<=1000000; j+=2)
{
if(!sieve[j])
sieve[j]=1;
}
}
}
int pow(int a,int b)
{
int i,p=1;
for(i=1; i<=b; i++)
p*=a;
return p;
}
void tr(int n)
{
int poz=0,put=0;
div=1;
sum=1;
for(int i=0; primes[i]*primes[i]<=n && n>1 && i<n; i++)
{
while(n%primes[i]==0&&n>1)
{
n/=primes[i];
put++;
//cout << "1";
}
div*=(put+1);
div%=9973;
sum*=(pow(primes[i],put+1)-1);
sum/=(primes[i]-1);
sum%=9973;
put=0;
//cout << "3";
}
if(n>1)
{
div*=2;
sum=sum*(n+1);
}
}
int main()
{
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
getsieve();
int n,p;
cin>>n;
while(n)
{
cin>>p;
tr(p);
cout << div << " " << sum << endl;
//cout << "2";
n--;
}
return 0;
}