#include using namespace std; #define int long long int M; struct node{ int a[2][2]; node operator * (const node b) const{ node c={0,0,0,0}; for(int k=0;k<2;k++) for(int i=0;i<2;i++) for(int j=0;j<2;j++) c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%M)%M; return c; } }s,b; node qpow(node x,int y){ if(y==1) return x; node z=qpow(x,y/2); if(y%2) return z*z*x; return z*z; } int n,ans=0; signed main(){ //freopen("fib.in","r",stdin); //freopen("fib.out","w",stdout); b={1,1,1,0}; s={1,0,0,0}; cin>>n; ans=0;M=2e9+16; if(n==0) ans=0; else if(n==1) ans=1; else ans=(s*qpow(b,n-1)).a[0][0]; n=ans; ans=0;M=1e9+7; if(n==0) ans=0; else if(n==1) ans=1; else ans=(s*qpow(b,n-1)).a[0][0]; cout<