#include #include #include #include #include #include #include #include #include #include using namespace std; #define MOD 1000000007 //[n*p] * [p*m] => [n*m] template vector< vector > multmat(const vector > &A, const vector> &B, int n, int p, int m){ vector > C(n, vector(m,0)); for(int i=0; i= MOD) C[i][j] %= MOD; } } } return C; } //A[n*n]^k template vector< vector > mat_pow(vector > A, long long k){ int n = A.size(); vector > ret(n, vector(n, 0) ); for(int i=0; i0){ if(k&1) ret = multmat(A,ret, n,n,n); A = multmat(A,A, n,n,n); k>>=1; } return ret; } int main(){ long long n; //cin >> n; scanf("%lld", &n); vector> mat = { {0,0,1}, {1,0,0}, {1,1,0} }; auto mat_ = mat_pow(mat, n); //cerr << mat_ << endl; long long ans = (mat_[0][2]+mat_[1][2]+mat_[2][2])%MOD; //cout << (mat_[0][2]+mat_[1][2]+mat_[2][2])%MOD << endl; printf("%lld\n", ans); return 0; }