#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9+7;

bool check(const string& s){

  if(s.find("AGC") != string::npos) return false;

  int n = s.size();

  for(int i = 0; i < n-1; i++){
    string t = s;

    swap(t[i], t[i+1]);
    
    if(t.find("AGC") != string::npos) return false;
  }

  return true;
  
}

int main(){

  int n;

  cin >> n;

  map<string, long long> dp;

  dp["..."] = 1;

  for(int i = 0; i < n; i++){

    map<string, long long> nextDp;

    for(const auto& p : dp){
      string s = p.first;

      for(int j = 0; j < 4; j++){

	string t = s + "ACGT"[j];

	if( check(t) ){
	  t = t.substr(1);
	  nextDp[t] += p.second;
	  nextDp[t] %= MOD;
	}
      }
    }
    dp = move(nextDp);
  }

  long long ans = 0;

  for(const auto& p : dp){
    ans += p.second;
    ans %= MOD;
  }
  cout << ans << endl;

  return 0;
}

### Prompt

Your challenge is to write a Cpp solution to the following problem:

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;

const int MOD = 1e9+7;

bool check(const string& s){

  if(s.find("AGC") != string::npos) return false;

  int n = s.size();

  for(int i = 0; i < n-1; i++){
    string t = s;

    swap(t[i], t[i+1]);
    
    if(t.find("AGC") != string::npos) return false;
  }

  return true;
  
}

int main(){

  int n;

  cin >> n;

  map<string, long long> dp;

  dp["..."] = 1;

  for(int i = 0; i < n; i++){

    map<string, long long> nextDp;

    for(const auto& p : dp){
      string s = p.first;

      for(int j = 0; j < 4; j++){

	string t = s + "ACGT"[j];

	if( check(t) ){
	  t = t.substr(1);
	  nextDp[t] += p.second;
	  nextDp[t] %= MOD;
	}
      }
    }
    dp = move(nextDp);
  }

  long long ans = 0;

  for(const auto& p : dp){
    ans += p.second;
    ans %= MOD;
  }
  cout << ans << endl;

  return 0;
}

```