#include <cstdio>
#include <vector>
#include <math.h>
#include <string>
#include <bitset>
#include <algorithm>
#define PT(i,n) for(i=1;i<=n;i++)
#define md 9973
int dx[8]={-1,-1,0,+1,+1,+1,0,-1};
int dy[8]={0,+1,+1,+1,0,-1,-1,-1};
using namespace std;
FILE *f,*g;
int t,i,nr;
long long n;
int pr[80000];
int cn,sol1,sol2,lim,nr1,nr2,q;
char p[1000000];
void ciur(int n)
{
int i, j;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((p[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
p[j >> 3] |= (1 << (j & 7));
}
}
}
pr[nr=1]=2;
for (i = 1; 2 * i + 1 <= n; ++i)
if ((p[i >> 3] & (1 << (i & 7))) == 0)
pr[++nr]=2*i+1;
}
int ridic(int x, int put)
{
int sl=1,p=(x%md);
for (;put;put>>=1,p=(p*p)%md)
if (put&1)
{
sl=(sl*p)%md;
}
return sl;
}
int main()
{
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
ciur(1000010);
fscanf(f,"%d",&t);
PT(q,t)
{
fscanf(f,"%lld",&n);
lim=sqrt(n)+1;
sol1=sol2=1;
for (i=1;n!=1 && pr[i]<=lim;i++)
if (n%pr[i]==0)
{
cn=0;
while (n%pr[i]==0)
{
cn++;
n=(long long)n/pr[i];
}
sol1=(sol1*(cn+1));
nr1=ridic(pr[i],cn+1);
if (nr1==0) nr1=md-1; else nr1--;
nr2=ridic(pr[i]-1,md-2);
sol2=(sol2*( (nr1*nr2)%md))%md;
}
if (n!=1)
{
sol1=(sol1*2);
nr1=ridic(n,2);
if (nr1==0) nr1=md-1; else nr1--;
nr2=ridic(n-1,md-2);
sol2=(sol2*( (nr1*nr2)%md))%md;
}
fprintf(g,"%d %d\n",sol1,sol2);
}
return 0;
}