#include<bits/stdc++.h>
using namespace std;
int a[10000005];
void sieve()
{
int n=10000000,i,j;
for(i=4;i<=n;i+=2)
a[i]=1;
for(i=3;i<=sqrt(n);i+=2)
{
if(a[i]==0)
{
for(j=i*i;j<=n;j+=i)
a[j]=1;
}
}
}
int phi(int n)
{
int result,i,j,k;
result=n;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
while(n%i==0)
n=n/i;
result-=result/i;
}
}
if(n>1)
result-=result/n;
return result;
}
int main()
{
long long int t,m,n,z,k=0,x,y,i,j,c,d;
stack<int>s;
sieve();
for(i=2;i<=10000000;i++)
{
if(a[i]==0)
a[i]=a[i-1]+1;
else
a[i]=a[i-1];
}
cin>>t;
while(t--)
{
cin>>n;
x=phi(n);
y=max(k,a[n]-x);
m=1;
if(y>=1)
m=x;
for(i=2;i<=y;i++)
{
j=i;
c=1;
while(j)
{
s.push(j);
if(j%2==0)
j/=2;
else
j--;
}
while(!s.empty())
{
z=s.top();
s.pop();
if(z%2==1)
c=((c%1000000007)*(m%1000000007))%1000000007;
else
c=((c%1000000007)*(c%1000000007))%1000000007;
}
m=c%1000000007;
}
cout<<m<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGFbMTAwMDAwMDVdOwp2b2lkIHNpZXZlKCkKewogICAgaW50IG49MTAwMDAwMDAsaSxqOwogICAgZm9yKGk9NDtpPD1uO2krPTIpCiAgICAgICAgICAgIGFbaV09MTsKICAgIGZvcihpPTM7aTw9c3FydChuKTtpKz0yKQogICAgewogICAgICAgIGlmKGFbaV09PTApCiAgICAgICAgewogICAgICAgICAgICBmb3Ioaj1pKmk7ajw9bjtqKz1pKQogICAgICAgICAgICAgICAgYVtqXT0xOwogICAgICAgIH0KICAgIH0KfQppbnQgcGhpKGludCBuKQp7CiAgICBpbnQgcmVzdWx0LGksaixrOwogICAgcmVzdWx0PW47CiAgICBmb3IoaT0yO2k8PXNxcnQobik7aSsrKQogICAgewogICAgICAgIGlmKG4laT09MCkKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlKG4laT09MCkKICAgICAgICAgICAgICAgIG49bi9pOwogICAgICAgICAgICByZXN1bHQtPXJlc3VsdC9pOwogICAgICAgIH0KICAgIH0KICAgIGlmKG4+MSkKICAgICAgICByZXN1bHQtPXJlc3VsdC9uOwogICAgcmV0dXJuIHJlc3VsdDsKfQppbnQgbWFpbigpCnsKICAgICBsb25nIGxvbmcgaW50IHQsbSxuLHosaz0wLHgseSxpLGosYyxkOwogICAgIHN0YWNrPGludD5zOwogICAgIHNpZXZlKCk7CiAgICAgZm9yKGk9MjtpPD0xMDAwMDAwMDtpKyspCiAgICAgewogICAgICAgICBpZihhW2ldPT0wKQogICAgICAgICAgICBhW2ldPWFbaS0xXSsxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgIGFbaV09YVtpLTFdOwogICAgIH0KICAgICBjaW4+PnQ7CiAgICAgd2hpbGUodC0tKQogICAgIHsKICAgICAgICBjaW4+Pm47CiAgICAgICAgeD1waGkobik7CiAgICAgICAgeT1tYXgoayxhW25dLXgpOwogICAgICAgIG09MTsKICAgICAgICBpZih5Pj0xKQogICAgICAgICAgICBtPXg7CiAgICAgICAgZm9yKGk9MjtpPD15O2krKykKICAgICAgICB7CiAgICAgICAgICAgIGo9aTsKICAgICAgICAgICAgYz0xOwogICAgICAgICAgICB3aGlsZShqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzLnB1c2goaik7CiAgICAgICAgICAgICAgICBpZihqJTI9PTApCiAgICAgICAgICAgICAgICAgICAgai89MjsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUoIXMuZW1wdHkoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgej1zLnRvcCgpOwogICAgICAgICAgICAgICAgcy5wb3AoKTsKICAgICAgICAgICAgICAgIGlmKHolMj09MSkKICAgICAgICAgICAgICAgICAgICBjPSgoYyUxMDAwMDAwMDA3KSoobSUxMDAwMDAwMDA3KSklMTAwMDAwMDAwNzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBjPSgoYyUxMDAwMDAwMDA3KSooYyUxMDAwMDAwMDA3KSklMTAwMDAwMDAwNzsKICAgICAgICAgICAgfQogICAgICAgICAgICBtPWMlMTAwMDAwMDAwNzsKICAgICAgICB9CiAgICAgICAgY291dDw8bTw8ZW5kbDsKICAgICB9Cn0=