#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <limits>
#include <queue>
#include <iomanip>
#include <set>

template<typename T> bool chmax(T &a,T b){
    if(a<b){
        a=b;
        return true;
    }
    return false;
}

template<typename T> bool chmin(T &a,T b){
    if(a>b){
        a=b;
        return true;
    }
    return false;
}

using namespace std;
using ll = long long int;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef vector<vvll> vvvll;
const int MOD=1000000007;
//const int MOD=998244353;
const int INTMAX=1001001000;
const ll LLMAX=1010010010010010000;

ll modadd(ll a,ll b,ll mod=MOD){
    return (a%mod+b%mod)%mod;
}

ll modsub(ll a,ll b,ll mod=MOD){
    a%=mod;
    b%=mod;
    if(a>=b) return a-b;
    else return mod-b+a;
}

ll modmul(ll a,ll b,ll mod=MOD){
    return ((a%mod)*(b%mod))%mod;
}

ll modpow(ll a, ll n,ll mod=MOD) {
    ll res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}

ll moddiv(ll a,ll b,ll mod=MOD) {
    return modmul(a, modpow(b, mod-2));
}


vector<int> decode(int a){
    vector<int> ret(4);
    ret[0]=a%4;a/=4;
    ret[1]=a%4;a/=4;
    ret[2]=a%4;a/=4;
    ret[3]=a%4;a/=4;
    
    return ret;
}

int encode(vector<int> a){
    return a[0]+4*a[1]+16*a[2]+64*a[3];
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N;
    cin>>N;
    
    if(N==3){
        cout<<61<<endl;
        return 0;
    }
    
    //AGCT 0123
    //not allowed
    //AGC,GAC,ACG,AxGC,AGxC
    //x012,012x,x102,102x,x021,021x,0x12,01x2;
    vvll dp(N,vll(256));
    
    for(ll i=3;i<N;i++){
        if(i==3){
            for(int j=0;j<256;j++){
                dp[i][j]=1;
            }
            
        }else{
            for(int j=0;j<4;j++){
                for(int k=0;k<4;k++){
                    for(int l=0;l<4;l++){
                        for(int m=0;m<4;m++){
                            int jklm=encode(vector<int>{j,k,l,m});
                            dp[i][jklm]=0;
                            for(int n=0;n<4;n++){
                                dp[i][jklm]=modadd(dp[i][jklm],dp[i-1][encode(vector<int>{n,j,k,l})]);
                            }
                        }
                    }
                }
            }
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{j,0,1,2})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{0,1,2,j})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{j,1,0,2})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{1,0,2,j})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{j,0,2,1})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{0,2,1,j})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{0,j,1,2})]=0;
        }
        for(int j=0;j<4;j++){
            dp[i][encode(vector<int>{0,1,j,2})]=0;
        }
    }
    
    ll ans=0;
    for(ll i=0;i<256;i++){
        ans=modadd(ans,dp[N-1][i]);
    }
    cout<<ans<<endl;
    
    return 0;
}


Measured memory_bytes: 512