Cod sursa(job #467756)
#include <cstdio>
#include <bitset>
#include <vector>
#define DN 1000001
#define REST 9973
using namespace std;
bitset <1000004> ciur;
vector<int>::iterator it;
vector <int> prime;
void c() {
for(int i=2; i<=DN; i++)
if(!ciur[i]) {
prime.push_back(i);
for(int j=i+i; j<=DN;j+=i) ciur[j]=1;
}
}
inline int pow(int x, int p) {
int rez = 1;
x %= REST;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= REST;
}
x *= x;
x %= REST;
}
return rez;
}
int main()
{
int t,nd,sd,p,s;
long long n,cn;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
c();
for(scanf("%d",&t);t;t--) {
scanf("%lld",&n);
cn=n;
nd=sd=1;
for(it=prime.begin(); (long long)(*it)*(*it)<=n; it++)
if(!(n%(*it))) {
p=0,s=1;
while(!(cn%(*it))) {
cn/=(*it);
s*=(*it);
p++;
}
nd*=(p+1);
sd *= ((1LL*s*(*it) - 1) % REST);
sd %= REST;
sd *= pow((*it)-1, REST-2);
sd %= REST;
}
if(cn > 1) {
nd *= 2;
sd = (1LL*sd*(cn+1) % REST);
}
printf("%d %d\n",nd,sd);
}
return 0;
}