#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
const unsigned int FIBOLIMIT = 1000000007;
unsigned long long getFibo(map<unsigned long long, unsigned long long>& fibo, unsigned long long n)
{
unsigned long long half = (unsigned long long)(n / 2);
auto index = fibo.find(n);
if (index != fibo.end())
{
return index->second;
}
else
{
unsigned long long a = (getFibo(fibo, half + 1) % FIBOLIMIT);
unsigned long long b = (getFibo(fibo, n - half) % FIBOLIMIT);
unsigned long long c = (getFibo(fibo, half) % FIBOLIMIT);
unsigned long long d = (getFibo(fibo, n - half - 1) % FIBOLIMIT);
fibo.insert(make_pair(n, (a * b + c * d) % FIBOLIMIT));
return fibo[n];
}
}
int main()
{
unsigned long long n;
map<unsigned long long, unsigned long long> fibo;
fibo.insert(make_pair(0, 0));
fibo.insert(make_pair(1, 1));
fibo.insert(make_pair(2, 1));
cin >> n;
cout << getFibo(fibo, n) << endl;;
return 0;
}