#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define ll long long
using namespace std;
const ll mo=1000000007;
int read(){
int x=0,f=1;
char c=getchar();
while (c<'0'||c>'9'){
if (c=='-') f=-1;
c=getchar();
}
while (c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
struct maritx{
long long n=0,m=0,a[10][10]={};
};
maritx operator*(const maritx &a,const maritx &b){
maritx c;
c.n=a.n;
c.m=b.n;
for (int i=1;i<=c.n;i++){
for (int j=1;j<=c.m;j++){
for (int k=1;k<=a.m;k++){
c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%mo;
}
}
}
return c;
}
maritx f(maritx x,int y){
if (y==0){
maritx z;
z.m=z.n=x.n;
for (int i=1;i<=z.n;i++){
for (int j=1;j<=z.m;j++){
if (i==j) z.a[i][j]=1;
}
}
return z;
}
maritx v=f(x,(y>>1));
v=v*v;
if (y&1==1){
v=v*x;
}
return v;
}
maritx a,b;
int n,k;
int main(){
n=read();
a.a[1][1]=1;
a.a[1][2]=0;
a.n=1;
a.m=2;
b.a[1][1]=1;
b.a[1][2]=1;
b.a[2][1]=1;
b.a[2][2]=0;
b.n=2;
b.m=2;
a=a*f(b,n-1);
printf("%d",a.a[1][1]);
return 0;
}