#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define loop(i,a,b) for(int i=a;i pii; typedef vector vi; typedef vector vvi; typedef vector vp; typedef vector vvp; typedef vector vs; typedef vector vd; typedef tuple tp; typedef vector vt; typedef vector vvd; typedef pair pip; typedef vectorvip; const double PI=acos(-1); const double EPS=1e-7; const int inf=1e9; const ll INF=2e18; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; #define MOD 1000000007 vvi mul(vvi A,vvi B){ vvi C(A.size(),vi(B[0].size())); rep(i,A.size())rep(k,B.size())rep(j,B[0].size()) (C[i][j]+=A[i][k]*B[k][j])%=MOD; return C; } vvi pow(vvi A,ll n){ vvi B(A.size(),vi(A.size())); rep(i,A.size())B[i][i]=1; while(n){ if(n&1)B=mul(B,A); A=mul(A,A); n>>=1; } return B; } int main(){ vvi A{{1,1},{1,0}}; ll n; cin>>n; assert(1<=n&&n<=10000000000); A=pow(A,n); cout<