#include<bits/stdc++.h>
using namespace std;
struct nof
{
unsigned long long data[3][3];
};
unsigned long long F[3][2];
unsigned long long T[3][3];
unsigned long long Multiplication_first(unsigned long long A[3][3] , unsigned long long B[3][2])
{
return (A[1][1] * B[1][1] + A[1][2] * B[2][1]) % 1000000007;
}
nof P(unsigned long long A[3][3] , unsigned long long B[3][3])
{
nof C;
for(int i = 1;i <= 2;++ i)
for(int j = 1;j <= 2;++ j)
C.data[i][j] = 0;
for(int i = 1;i <= 2;++ i)
{
for(int k = 1;k <= 2;++ k)
{
unsigned long long t = A[i][k];
for(int j = 1;j <= 2;++ j)
{
C.data[i][j] = (C.data[i][j] + t * B[k][j]) % 1000000007;
}
}
}
return C;
}
nof mod(nof A)
{
for(int i = 1;i <= 2;++ i)
{
for(int j = 1;j <= 2;++ j)
{
A.data[i][j] %= 1000000007;
}
}
return A;
}
nof l;
nof pow(unsigned long long A[3][3] , unsigned long long p)
{
for(int i = 1;i <= 2;++ i)
for(int j = 1;j <= 2;++ j)
l.data[i][j] = A[i][j];
if(p == 1)
return l;
if(p % 2)
return mod(P(mod(P(mod(pow(A , p / 2)).data , mod(pow(A , p / 2)).data)).data , A));
return mod(P(mod(pow(A , p / 2)).data , mod(pow(A , p / 2)).data));
}
int main()
{
unsigned long long n;
cin >> n;
F[1][1] = 1;
F[2][1] = 1;
T[1][1] = 1;
T[1][2] = 1;
T[2][1] = 1;
T[2][2] = 0;
if(n == 1 || n == 2)
{
cout << 1;
return 0;
}
printf("%lld" , Multiplication_first(mod(pow(T , n - 2)).data , F) % 1000000007);
return 0;
}