#include #include #define rep(i,a,b) for(int i=a;i=0;i--) #define rbit(i,a) for(int i=0;i<(1<bool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b; const ll mod=1e9+7; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; const string zton="0123456789"; const string atoz="abcdefghijklmnopqrstuvwxyz"; ll gcd(ll a,ll b){ ll r; r=a%b; if(r==0){ return b; } else{ return gcd(b,r); } } typedef pair P; ll power2[101010]; ll inv[2001010]; ll kaijou[2001010]; ll kaijou_inv[2001010]; ll nck(ll n,ll k){ if(n vec; typedef vector mat; mat mul (mat &A,mat &B){ mat C(A.size(),vec(B[0].size())); rep(i,0,A.size()){ rep(k,0,B.size()){ rep(j,0,B[0].size()){ C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod; } } } return C; } mat pow(mat A,ll n){ mat B(A.size(),vec(A.size())); rep(i,0,A.size()){ B[i][i]=1; } while(n>0){ if(n&1)B=mul(B,A); A=mul(A,A); n>>=1; } return B; } int main(void){ inv[0]=1; inv[1]=1; rep(i,2,2001010) inv[i]=inv[mod%i]*(mod-mod/i)%mod; kaijou[0]=1ll; rep(i,1,2001010){ kaijou[i]=kaijou[i-1]*1ll*i; kaijou[i]%=mod; } kaijou_inv[0]=1ll; rep(i,1,2001010){ kaijou_inv[i]=kaijou_inv[i-1]*1ll*(inv[i]); kaijou_inv[i]%=mod; } power2[0]=1; rep(i,0,101009)power2[i+1]=power2[i]*2%mod; int N;cin >> N; N/=2; N++; mat A(2,vec(2)); A[0][0]=1; A[0][1]=1; A[1][0]=1; A[1][1]=0; A=pow(A,N); cout << A[1][0] << endl; }