#include <bits/stdc++.h>
using namespace std;
const int MAXP = 1000001;
const long long MOD = 9973;
bool ciur[MAXP];
vector<int> primes;
void sieve() {
for (int i = 2; i < MAXP; i++) ciur[i] = true;
for (int i = 2; i < MAXP; i++) {
if (ciur[i]) {
for (long long j = (long long)i * i; j < MAXP; j += i)
ciur[j] = false;
}
}
for (int i = 2; i < MAXP; i++)
if (ciur[i]) primes.push_back(i);
}
int main() {
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
sieve();
int t;
scanf("%d", &t);
while (t--) {
long long n;
scanf("%lld", &n);
long long numDiv = 1;
long long sumDiv = 1;
long long temp = n;
for (int i = 0; i < (int)primes.size() && (long long)primes[i] * primes[i] <= temp; i++) {
int p = primes[i];
if (temp % p == 0) {
int d = 0;
long long pw = 1;
while (temp % p == 0) {
temp /= p;
d++;
pw *= p;
}
numDiv *= (d + 1);
// sum = 1 + p + p^2 + ... + p^d, mod 9973
long long s = 0;
long long cur = 1 % MOD;
for (int k = 0; k <= d; k++) {
s = (s + cur) % MOD;
cur = (cur * (p % MOD)) % MOD;
}
sumDiv = (sumDiv * s) % MOD;
}
}
if (temp > 1) {
numDiv *= 2;
long long s = (1 + temp % MOD) % MOD;
sumDiv = (sumDiv * s) % MOD;
}
printf("%lld %lld\n", numDiv, sumDiv);
}
return 0;
}