#include <bits/stdc++.h>
using namespace std;
unsigned long long n;
const int p=1e9+7;
struct Mat{
long long a[105][105];
int r,c;
Mat(int _r=0,int _c=0){
r=_r;
c=_c;
memset(a,0,sizeof(a));
if(c==0){
c=r;
}
}
void unit(){
memset(a,0,sizeof(a));
for(int i=1;i<=r;i++){
a[i][i]=1;
}
}
Mat operator*(const Mat &t)const{
Mat ans(r,t.c);
int n=r,m=t.c;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=1;k<=c;k++){
ans.a[i][j]+=a[i][k]*t.a[k][j];
ans.a[i][j]%=p;
}
}
}
}
void input(){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
}
}
}
void out(){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
}
Mat ksm(long long b){
Mat ans(r);
ans.unit();
Mat a=*this;
while(b!=0){
if(b&1){
ans=ans*a;
}
b>>=1;
ans=a*a;
}
return ans;
}
};
signed main(){
cin>>n;
if(n==1||n==2){
cout<<"1";
return 0;
}
Mat a(2);
a.a[1][1]=0,a.a[1][2]=1;
a.a[2][1]=1,a.a[2][2]=1;
a=a.ksm(n-2);
Mat ans(2);
ans.a[1][1]=1,ans.a[1][2]=1;
ans=ans*a;
cout<<ans.a[1][2];
return 0;
}
感谢大佬