#pragma GCC optimize ("O3") #pragma GCC target ("avx") #include "bits/stdc++.h" // define macro "/D__MAI" using namespace std; typedef long long int ll; #define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout< ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout< ostream& operator <<(ostream &o, const pair p) { o << "(" << p.first << ":" << p.second << ")"; return o; } ll dp[4][4]; ll solve(int n) { dp[0][1] = 1; // 1jump で 1step 登る.次は 1jump は使えない. dp[1][2] = 1; // 2jump で 2step 登る.次は 2jump は使えない. dp[2][3] = 1; // 3jump で 3step 登る.次は 3jump は使えない. for (int i = 1; i < n; ++i) { // 1jumpする. dp[1][1] = (dp[1][1] + (dp[0][2] + dp[0][3])) % MD; // 2jumpする. dp[2][2] = (dp[2][2] + (dp[0][1] + dp[0][3])) % MD; // 3jumpする. dp[3][3] = (dp[0][1] + dp[0][2]) % MD; // dp配列をずらす. for (int u = 1; u <= 3; ++u) { for (int v = 1; v <= 3; ++v) { dp[u - 1][v] = dp[u][v]; } } } return (dp[0][1] + dp[0][2] + dp[0][3]) % MD; } int main() { int n; cin >> n; cout << solve(n) << endl; }