// #define _GLIBCXX_DEBUG // for STL debug (optional)
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
#include <bitset>
using namespace std;

#define debug(...) fprintf(stderr, __VA_ARGS__)
#define int long long int
 
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
 
typedef pair<int, int> pii;
typedef long long ll;
 
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
const ll INF = 1001001001001001LL;
const ll MOD = 1000000007LL;

int dp[110][5][5][5][5][5];

bool valid_string(string s) {
    if(s.find("AGC") != string::npos) return false;
    return true;
}

bool check(string s) {
    int N = s.size();

    bool res = valid_string(s);
    for(int i=0; i<N-1; i++) {
        string t = s;
        swap(t[i], t[i+1]);
        res &= valid_string(t);
    }
    return res;
}

signed main() {
    int N; cin >> N;

    string pat = "ATGC";
    dp[0][4][4][4][4][4] = 1;
    for(int i=0; i<N; i++) {
        for(int a=0; a<5; a++) {
            for(int b=0; b<5; b++) {
                for(int c=0; c<5; c++) {
                    for(int d=0; d<5; d++) {
                        for(int e=0; e<5; e++) {
                            string s = "";
                            if(a < 4) s += pat[a];
                            if(b < 4) s += pat[b];
                            if(c < 4) s += pat[c];
                            if(d < 4) s += pat[d];
                            if(e < 4) s += pat[e];
                            if(!check(s)) continue;

                            int na = b, nb = c, nc = d, nd = e, ne = -1;
                            for(int x=0; x<4; x++) {
                                ne = x;
                                string t = (s.length() > 1 ? s.substr(1) : "");
                                t += pat[ne];

                                if(!check(t)) continue;
                                (dp[i+1][na][nb][nc][nd][ne] += dp[i][a][b][c][d][e]) %= MOD;
                            }
                        }
                    }
                }
            }
        }
    }

    int ans = 0;
    for(int a=0; a<5; a++) {
        for(int b=0; b<5; b++) {
            for(int c=0; c<5; c++) {
                for(int d=0; d<5; d++) {
                    for(int e=0; e<5; e++) {
                        string s = "";
                        if(a < 4) s += pat[a];
                        if(b < 4) s += pat[b];
                        if(c < 4) s += pat[c];
                        if(d < 4) s += pat[d];
                        if(e < 4) s += pat[e];
                        if(!check(s)) continue;

                        if(dp[N][a][b][c][d][e]) {
                            // fprintf(stderr, "dp[%lld%lld%lld%lld%lld] = %lld\n", a, b, c, d, e, dp[N][a][b][c][d][e]);
                        }
                        (ans += dp[N][a][b][c][d][e]) %= MOD;
                    }
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}


Measured memory_bytes: 2688