#include <iostream>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <stack>
#include <list>
#include <utility>
#include <vector>
#include <set>
#include <algorithm>
#include <cmath>
#include <climits>
#include <map>
#include <unordered_map>
#include <string.h>
#include<iomanip>
#include <iterator>
#include <locale>

#define all(a) a.begin(),a.end()
#define VV(T) vector<vector< T > >
#define rep(i,N) for(int i = 0; i <N; i++)
#define repsg(i,s,g) for(int i = s; i <g; i++)
#define name(x) #x


using namespace std;

const int INF = INT_MAX;
const long long INFL = 1LL<<40;
const double PI = atan(1)*4;
const long long MOD = pow(10,9)+7;
int dy[]={0, 0, 1, -1, 0};
int dx[]={1, -1, 0, 0, 0};

typedef long long ll,LL;
typedef vector<int> vint;
typedef vector<vector<int> > vvint;
typedef vector<long long> vll, vLL;
typedef vector<vector<long long> > vvll, vvLL;
typedef pair<int,int> pii;
typedef pair<LL, LL> pLL;


// vector入力
template<typename T>
istream& operator >> (istream& is, vector<T>& vec){
    for(T& x: vec) is >> x;
    return is;
}
// vector出力
template<typename T>
ostream& operator << (ostream& os, vector<T>& vec){
    for(int i=0; i<vec.size(); i++){
        os << vec[i] << ( i+1 == vec.size() ? "" : " " );
    }
    return os;
}


ll dp[101][4][4][4][4];

int main() {
    
    int n;cin>>n;

    if(n==3){
        cout<<61<<endl;
        return 0;
    }
    
    rep(i1,4)rep(i2,4)rep(i3,4){
        
        if((i1==1 && i2 == 2 && i3 == 0) || (i1==2 && i2 == 1 && i3 == 0) || (i1==1 && i2 == 0 && i3 == 2) ) {
            continue;
        }
        
        
        dp[4][0][i1][i2][i3] = 1;
        dp[4][1][i1][i2][i3] =  !(i1==2 && i2 == 0) && !(i3==0 && i1 == 2) && !(i2 == 2 && i3 == 0) && !(i1 == 0 && i2 == 2) ;
        dp[4][2][i1][i2][i3] = !(i1==1 && i2 == 0);
        dp[4][3][i1][i2][i3] = 1;
    }
    
    repsg(i,5,n+1){
        rep(i1,4)rep(i2,4)rep(i3,4){
            //Aを入れてはいけないパターン: なし
            dp[i][0][i1][i2][i3] += dp[i-1][i1][i2][i3][0]+dp[i-1][i1][i2][i3][1]+dp[i-1][i1][i2][i3][2]+dp[i-1][i1][i2][i3][3];
            dp[i][0][i1][i2][i3] %=MOD;
            //Cを入れてはいけないパターン: XAG, AXG,AGX,XGA,
            if( !(i1==2 && i2 == 0) && !(i3==0 && i1 == 2) && !(i2 == 2 && i3 == 0) && !(i1 == 0 && i2 == 2) ){
                dp[i][1][i1][i2][i3] += dp[i-1][i1][i2][i3][0]+dp[i-1][i1][i2][i3][1]+dp[i-1][i1][i2][i3][2]+dp[i-1][i1][i2][i3][3];
            }
            dp[i][1][i1][i2][i3] %=MOD;
            //Gを入れてはいけないパターン: XAC
            if( !(i1==1 && i2 == 0) ){
                dp[i][2][i1][i2][i3] += dp[i-1][i1][i2][i3][0]+dp[i-1][i1][i2][i3][1]+dp[i-1][i1][i2][i3][2]+dp[i-1][i1][i2][i3][3];
            }
            dp[i][2][i1][i2][i3] %=MOD;
            // Tを入れてはいけないパターン: なし
            dp[i][3][i1][i2][i3] += dp[i-1][i1][i2][i3][0]+dp[i-1][i1][i2][i3][1]+dp[i-1][i1][i2][i3][2]+dp[i-1][i1][i2][i3][3];
            dp[i][3][i1][i2][i3] %=MOD;
        }
    }

    
    ll out = 0;
    rep(i0,4)rep(i1,4)rep(i2,4)rep(i3,4){
        out+=dp[n][i0][i1][i2][i3];
        out%=MOD;
    }
    
    cout<<out<<endl;
    
    return 0;
}


/*
 
 A, C, G, T
 
 含まれてはいけない文字列のパターン
 (1) AGC, GAC, ACG
 (2) AXGC
 (3) AGXC
 
 これを含むものを4^Nから除けばいいが、ダブルカウントが面倒。
 i文字目を見ているとして、i-1,i-2,i-3文字目の状態がわかっていれば大丈夫。
 (1)は自明に除ける。前三文字を見たときに、AXG, AGXであればC以外といったようにDPで処理する。
 4文字分保持するので4^4 = 256 * 100のdpテーブル。
 
 
 
 
 */


Measured memory_bytes: 384