#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAX=100005;
const int mod=1000000007;
char s[MAX];
long long pow(long long a,long long b)
{
long long base=a,r=1;
while(b!=0)
{
if(b&1) r=(r*base)%mod;
base=(base*base)%mod;
b>>=1;
}
return r%mod;
}
int main()
{
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
long long num=0;
for(int i=0;i<len;i++)//大数取模
num=(num*10+(int)(s[i]-'0'))%(mod-1);
if(num==0)//说明num=mod-1
{
cout<<pow(2,mod-2)<<endl;
}
else
{
num--;
cout<<pow(2,num)<<endl;
}
}
return 0;
}
HDU4704
于任意自然数,当要求a^p%m时,就可以利用费马小定理化简,只需求(a^(p%(m-1)))%m;(p是素数)