参考:https://www.cnblogs.com/stepping/p/7144512.html
1、组合数学部分:
2、欧拉部分:
gcd(1e9+7,2)==1 -->pow(2,N-1)==pow(2,(N-1)%(phi[1e9+7]));
ll mod=1e9+7;
void rep(ll &a,ll b){
a%=b;
a+=b;
a%=b;
}
ll p;
ll pow(ll a,ll b,ll p){
rep(a,p);
ll res=1;
//cout<<"??";
while(b){
//cout<<"??"<<en;
if(b&1){
//res=mul(res,a);
res=res*a;
rep(res,p);
}
b>>=1;
//a=mul(a,a);
a=a*a;
rep(a,p);
}
return res;
}
ll n;
ll euler(ll x)
{
ll tt=sqrt(x);
ll res=x;
for(ll i=2;i<=tt;i++){
if(x%i==0){
res=res/i*(i-1);
while(x%i==0){
x/=i;
}
}
}if(x>1){
res=res/x*(x-1);
}
return res;
}
char s[maxn];
signed main() {
#ifdef local
freopen("input2.txt","r",stdin);
#endif //local
ll n;
while(cin>>s){
ll tem=0;
for(ll i=0;s[i];i++){
tem=tem*10+s[i]-'0';
rep(tem,mod-1);
}
tem-=1;
rep(tem,mod);
ll ans=pow(2,tem,mod);
cout<<ans<<en;
}
return 0;
}