题目链接:https://nanti.jisuanke.com/t/31716
#include<bits/stdc++.h>
using namespace std;
#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define read(x,y) scanf("%d%d",&x,&y)
#define ll long long
#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int maxn =1e5+5;
const int mod=1e9+7;
/*
题目大意:把n分成不超过n个段问有多少种组合方法
另一种隔板,在n-1个空档中选择0到n-1个,答案是2^(n-1)。
最后配合个欧拉降幂公式即可。
*/
ll powmod(ll x,ll y)
{
ll ret=1;
for(;y;y>>=1,x=x*x%mod)
if(y&1) ret=ret*x%mod;
return ret;
}
char s[maxn];
ll tp=0;
int main()
{
int t;scanf("%d",&t);
while(t--)
{
tp=0;
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)
{
tp=tp*10+(s[i]-'0');
tp%=mod-1;
}
if(tp==0) puts("1");
else printf("%lld\n",powmod(2LL,tp-1));
}
return 0;
}