#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0; i < n; i++)
typedef long long ll;

const ll MOD = 1e9 + 7;
const int A = 0, G = 1, C = 2, T = 3;
ll dp[101][4][4][4]; //初期値0

int main(){
    int n; cin >> n;
    rep(i,4) rep(j,4) rep(k,4) dp[3][i][j][k] = 1;
    dp[3][A][G][C] = dp[3][A][C][G] = dp[3][G][A][C] = 0;
    for(int i = 4; i <= n; i++){
        rep(j,4){ //i-3文字目
            rep(k,4){ //i-2文字目
                rep(l,4){ //i-1文字目
                    rep(m,4){ //i文字目
                        if((j == A && k == G && m == C) || (j == A && l == G && m == C)) continue;
                        dp[i][k][l][m] = (dp[i][k][l][m] + dp[i-1][j][k][l]) % MOD;
                    }
                }
            }
        }
        dp[i][A][G][C] = dp[i][A][C][G] = dp[i][G][A][C] = 0;
    }
    ll ans = 0;
    rep(i,4) rep(j,4) rep(k,4) ans = (ans + dp[n][i][j][k]) % MOD;
    cout << ans << endl;
}

### Prompt

Construct a cpp code solution to the problem outlined:

You are given an integer N. Find the number of strings of length N that satisfy the following conditions, modulo 10^9+7:

* The string does not contain characters other than `A`, `C`, `G` and `T`.
* The string does not contain `AGC` as a substring.
* The condition above cannot be violated by swapping two adjacent characters once.

Constraints

* 3 \leq N \leq 100

Input

Input is given from Standard Input in the following format:


N


Output

Print the number of strings of length N that satisfy the following conditions, modulo 10^9+7.

Examples

Input

3


Output

61


Input

4


Output

230


Input

100


Output

388130742

### Response

```cpp
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0; i < n; i++)
typedef long long ll;

const ll MOD = 1e9 + 7;
const int A = 0, G = 1, C = 2, T = 3;
ll dp[101][4][4][4]; //初期値0

int main(){
    int n; cin >> n;
    rep(i,4) rep(j,4) rep(k,4) dp[3][i][j][k] = 1;
    dp[3][A][G][C] = dp[3][A][C][G] = dp[3][G][A][C] = 0;
    for(int i = 4; i <= n; i++){
        rep(j,4){ //i-3文字目
            rep(k,4){ //i-2文字目
                rep(l,4){ //i-1文字目
                    rep(m,4){ //i文字目
                        if((j == A && k == G && m == C) || (j == A && l == G && m == C)) continue;
                        dp[i][k][l][m] = (dp[i][k][l][m] + dp[i-1][j][k][l]) % MOD;
                    }
                }
            }
        }
        dp[i][A][G][C] = dp[i][A][C][G] = dp[i][G][A][C] = 0;
    }
    ll ans = 0;
    rep(i,4) rep(j,4) rep(k,4) ans = (ans + dp[n][i][j][k]) % MOD;
    cout << ans << endl;
}

```