#include <cmath>
#include <cstdio>
#include <vector>
#include <array>
#include <iostream>
#include <algorithm>
using namespace std;
const int mod = 1000000007;
struct vec{
array<int64_t, 2> v;
vec(){}
vec(int64_t a, int64_t b){
v[0] = a;
v[1] = b;
}
int64_t& operator[](int index){
return v[index];
}
};
struct mat{
array<vec, 2> m;
vec& operator[](int index){
return m[index];
}
vec operator*(vec in){
vec out;
out.v[0] = in.v[0] * m[0][0];
out.v[0] += in.v[1] * m[0][1];
out[0] %= mod;
out.v[1] = in.v[0] * m[1][0];
out.v[1] += in.v[1] * m[1][1];
out[1] %= mod;
return out;
}
mat operator*(mat in){
mat out;
out [0] = (*this) * in[0];
out [1] = (*this) * in[1];
return out;
}
mat pow(int64_t pwr){
mat out = {vec(1,0),vec(0,1)};
mat base = *this;
while (pwr){
if (pwr & 1){
out = out * base;
}
base = base*base;
pwr /= 2;
}
return out;
}
};
int main() {
int64_t n;
cin >> n;
mat one_step = {vec(1,1),vec(1,0)};
mat many_steps = one_step.pow(n-1);
vec first_ate = many_steps * vec(0,1);
vec first_hungry = many_steps * vec(1,0);
int64_t answer = (first_ate[0] + first_hungry[0] + first_hungry[1]) % mod;
cout << answer << endl;
return 0;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtb2QgPSAxMDAwMDAwMDA3OwoKc3RydWN0IHZlY3sKICAgIGFycmF5PGludDY0X3QsIDI+IHY7CiAgICAKICAgIHZlYygpe30KICAgIAogICAgdmVjKGludDY0X3QgYSwgaW50NjRfdCBiKXsKICAgICAgICB2WzBdID0gYTsKICAgICAgICB2WzFdID0gYjsKICAgIH0KICAgIAogICAgaW50NjRfdCYgb3BlcmF0b3JbXShpbnQgaW5kZXgpewogICAgICAgIHJldHVybiB2W2luZGV4XTsKICAgIH0KfTsKCnN0cnVjdCBtYXR7CiAgICBhcnJheTx2ZWMsIDI+IG07CiAgICAKICAgIHZlYyYgb3BlcmF0b3JbXShpbnQgaW5kZXgpewogICAgICAgIHJldHVybiBtW2luZGV4XTsKICAgIH0KICAgIAogICAgdmVjIG9wZXJhdG9yKih2ZWMgaW4pewogICAgICAgIHZlYyBvdXQ7CiAgICAgICAgb3V0LnZbMF0gID0gIGluLnZbMF0gKiBtWzBdWzBdOwogICAgICAgIG91dC52WzBdICs9ICBpbi52WzFdICogbVswXVsxXTsKICAgICAgICBvdXRbMF0gJT0gbW9kOwogICAgICAgIG91dC52WzFdICA9ICBpbi52WzBdICogbVsxXVswXTsKICAgICAgICBvdXQudlsxXSArPSAgaW4udlsxXSAqIG1bMV1bMV07CiAgICAgICAgb3V0WzFdICU9IG1vZDsKICAgICAgICByZXR1cm4gb3V0OwogICAgfQogICAgCiAgICBtYXQgb3BlcmF0b3IqKG1hdCBpbil7CiAgICAgICAgbWF0IG91dDsKICAgICAgICBvdXQgWzBdID0gKCp0aGlzKSAqIGluWzBdOwogICAgICAgIG91dCBbMV0gPSAoKnRoaXMpICogaW5bMV07CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KICAgIAogICAgbWF0IHBvdyhpbnQ2NF90IHB3cil7CiAgICAgICAgbWF0IG91dCA9IHt2ZWMoMSwwKSx2ZWMoMCwxKX07CiAgICAgICAgbWF0IGJhc2UgPSAqdGhpczsKICAgICAgICB3aGlsZSAocHdyKXsKICAgICAgICAgICAgaWYgKHB3ciAmIDEpewogICAgICAgICAgICAgICAgb3V0ID0gb3V0ICogYmFzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBiYXNlID0gYmFzZSpiYXNlOwogICAgICAgICAgICBwd3IgLz0gMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KfTsKCgppbnQgbWFpbigpIHsKICAgIGludDY0X3QgbjsKICAgIGNpbiA+PiBuOwogICAgCiAgICBtYXQgb25lX3N0ZXAgPSB7dmVjKDEsMSksdmVjKDEsMCl9OwogICAgbWF0IG1hbnlfc3RlcHMgPSBvbmVfc3RlcC5wb3cobi0xKTsKICAgIHZlYyBmaXJzdF9hdGUgPSBtYW55X3N0ZXBzICogdmVjKDAsMSk7CiAgICB2ZWMgZmlyc3RfaHVuZ3J5ID0gbWFueV9zdGVwcyAqIHZlYygxLDApOwogICAgCiAgICBpbnQ2NF90IGFuc3dlciA9IChmaXJzdF9hdGVbMF0gKyBmaXJzdF9odW5ncnlbMF0gKyBmaXJzdF9odW5ncnlbMV0pICUgbW9kOwogICAgY291dCA8PCBhbnN3ZXIgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0K