#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template vector > matrixProduct( const vector >& x, const vector >& y, int mod) { int a = x.size(); int b = x[0].size(); int c = y[0].size(); vector > z(a, vector(c, 0)); for(int i=0; i vector > matrixPower(const vector >& x, long long k, int mod) { int n = x.size(); vector > y(n, vector(n, 0)); for(int i=0; i > z = x; while(k > 0){ if(k & 1) y = matrixProduct(y, z, mod); z = matrixProduct(z, z, mod); k >>= 1; } return y; } const int MOD = 1000000007; int main() { long long n; cin >> n; vector > mat = {{1,1}, {1,0}}; auto a = matrixPower(mat, n, MOD*2+2); auto b = matrixPower(mat, a[0][1], MOD); cout << b[0][1] << endl; return 0; }