primes,lpf(n+1,-1);
for(ll i=2;i<=n;i++){
if(lpf[i]==-1){
lpf[i]=i;
primes.push_back(i);
}
for(ll p:primes){
if(lpf[i]n)break;
lpf[p*i]=p;
}
}
return make_pair(primes,lpf);
}
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
cout< v(21);
for(int k=0;k<=20;k++){
for(int a=0;a<=k;a++)for(int b=0;a+b<=k;b++){
int c=k-a-b;
for(int d=0;a+d<=k;d++)for(int e=0;max(b,d)+e<=k;e++){
int f=k-d-e;
if(c+f<=k)
v[k]++;
}
}
}
auto lpf=linear_sieve(1000000).second;
int q;
cin>>q;
while(q--){
int k;
cin>>k;
mint ans=1;
while(k>1){
int p=lpf[k];
int cnt=0;
while(k%p==0){
k/=p;
cnt++;
}
ans*=v[cnt];
}
cout<