#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <stack>
#include <string>
#include <set>
#include <stdio.h>
#define max(a,b) (a>b?a:b)
using namespace std;

using ll = long long;
using pi = pair<int, int>;

//class BigNum {
//public:
//	string num;
//public:
//	BigNum() {
//		num = "0";
//	}
//	BigNum(string str) {
//		num = str;
//	}
//	BigNum(const int& b) {
//		num = to_string(b);
//	}
//	BigNum(const BigNum& b) {
//		num = b.num;
//	}
//	BigNum operator+(const BigNum& b) {
//		BigNum res = *this;
//		while (res.num.length() < b.num.length()) {
//			res.num = '0' + res.num;
//		}
//		int carry = 0;
//		int i = res.num.length() - 1;
//		int j = b.num.length() - 1;
//		while (i >= 0 || j >= 0) {
//			// add each digit
//			int s = (res.num[i] - '0') + (j >= 0 ? (b.num[j] - '0') : 0) + carry;
//			carry = s / 10;
//			res.num[i] = char((s % 10) + '0');
//			--i;
//			--j;
//		}
//		if (carry > 0)
//			res.num = '1' + res.num;
//		return res;
//	}
//
//	BigNum operator-(const BigNum& b) {
//		// assumes that this.num > b.num
//		BigNum res = *this;
//		int i = res.num.length() - 1;
//		int j = b.num.length() - 1;
//		int borrow = 0;
//		while (i >= 0 || j >= 0) {
//			int s = (res.num[i] - '0') - (j >= 0 ? (b.num[j] - '0') : 0) - borrow;
//			if (s < 0) {
//				s = s + 10;
//				borrow = 1;
//			}
//			else {
//				borrow = 0;
//			}
//			res.num[i] = char((s % 10) + '0');
//			--i;
//			--j;
//		}
//		while (res.num[0] == '0')
//			res.num.erase(res.num.begin());
//		return res;
//
//	}
//
//	BigNum operator*(const BigNum& b) {
//		int carry = 0;
//		BigNum res;
//		int i = this->num.length() - 1;
//		int cnt = 0;
//		while (i >= 0) {
//			int k = this->num[i] - '0';
//			BigNum temp;
//			while (k--) {
//				temp = temp + b;
//			}
//			int j = cnt;
//			while (j--) {
//				temp.num.push_back('0');
//			}
//			res = res + temp;
//			--i;
//			++cnt;
//		}
//		return res;
//	}
//	// return number of digits
//	int length() {
//		return num.length();
//	}
//
//	friend istream& operator>>(istream&, BigNum&);
//	friend ostream& operator<<(ostream&, const BigNum&);
//
//};
//
//istream& operator>>(istream& in, BigNum& b) {
//	in >> b.num;
//	return in;
//}
//
//ostream& operator<<(ostream& out, const BigNum& b) {
//	out << b.num;
//	return out;
//}
//
//// assumes both two are positive
//int compare(const BigNum& a, const BigNum& b) {
//	if (a.num.length() < b.num.length())
//		return -1;
//	if (a.num.length() > b.num.length())
//		return 1;
//	// equal length
//	if (a.num > b.num)
//		return 1;
//	if (a.num < b.num)
//		return -1;
//	return 0;
//}
//
//string binToHex(string bin) {
//	string res = "";
//	int i = bin.length() - 1;
//	int r = bin.length() % 4;
//	if (r != 0) {
//		r = 4 - r;
//		while (r--) {
//			bin = '0' + bin;
//		}
//	}
//	while (i >= 0) {
//		int num = (bin[i] - '0') + (bin[i - 1]-'0') * 2 + (bin[i - 2]-'0') * 4 + (bin[i - 3]-'0') * 8;
//		i -= 4;
//		char ch;
//		if (num > 9)
//			ch = 'A' + ((num - 10) % 10);
//		else
//			ch = '0' + num % 10;
//		res = ch + res;
//	}
//	return res;
//}
//
//ll modPow(ll base, ll exp, const ll MOD) {
//	ll ans = 1;
//	while (exp) {
//		if (exp % 2 == 1)
//			ans = (ans * base) % MOD;
//		base *= base;
//		base %= MOD;
//		exp = exp >> 1;
//	}
//	return ans;
//}

#define A 0
#define C 1
#define G 2
#define T 3
int dp[101][4][4][4];
const int MOD = 1e9 + 7;

int main() {	
	int n;
	cin >> n;
	dp[1][0][0][0] = 1;
	dp[1][1][1][1] = 1;
	dp[1][2][2][2] = 1;
	dp[1][3][3][3] = 1;
	for (int i = 1; i < n; ++i) {
		for (int i2 = 0; i2 < 4; ++i2) {
			for (int i3 = 0; i3 < 4; ++i3) {
				for (int i4 = 0; i4 < 4; ++i4) {
					for (int i5 = 0; i5 < 4; ++i5) {
						if (i3 == A && i4 == G && i5 == C) continue;
						if (i3 == A && i4 == C && i5 == G) continue;
						if (i3 == G && i4 == A && i5 == C) continue;
						if (i2 == A && i4 == G && i5 == C) continue;
						if (i2 == A && i3 == G && i5 == C) continue;
						dp[i + 1][i3][i4][i5] += dp[i][i2][i3][i4];
						dp[i + 1][i3][i4][i5] %= MOD;
					}
				}
			}
		}
	}
	ll ans = 0;
	for (int i2 = 0; i2 < 4; ++i2) {
		for (int i3 = 0; i3 < 4; ++i3) {
			for (int i4 = 0; i4 < 4; ++i4) {
				ans += dp[n][i2][i3][i4];
				ans %= MOD;
			}
		}
	}
	cout << ans;
}

Measured memory_bytes: 256