# Original solution
# ちーともわからんので解説見た
# ら、悔しさあふれる感じ
# NGになる文字の並びは限定される。3文字のものは"ACG" "GAC", 4文字のものは"AxGC", "AGxC"
# ここで, "AAGC"とか"AGCC"なんてのを考え出すと「すでに"AGC"が含まれとるやんけ」->（だから何？）みたいなよくわからん思考に陥ってしまった
# （いまみてるのとそれ以前の3つを保存して探索すると結局かぶらず全探索できるので考えなくていい）

# n = input()

# なんで？？？？？？？？？？？
# これが無限ループになるの？？？？？？？？？？？？？？？？
# は？？？？？？？？？？？？？？？？？？？？？？？？？？？
# def f(i, s):
#     if i == n:
#         return 1
#     # print("now s : {}".format(s))
#     ret = 0
#     for c in "ACGT":
#         print(s + c)
#         is_include = True if "AGC" in s + c else False
#         if is_include:
#             continue
#         ret += f(i + 1, s[1:] + c)
#     return ret
# print(f(0, "xxx"))
# coding: utf-8
# Your code here!

n = int(eval(input()))
memo = {}


def f(i, s):
    if (i, s) in memo:
        return memo[(i, s)]
    if i == n:
        return 1
    ret = 0
    for c in "AGCT":
        flag = False
        for j in range(4):
            t = list(s + c)
            if j >= 1:
                t[j], t[j - 1] = t[j - 1], t[j]
            if "AGC" in "".join(t):
                flag = True
        if not flag:
            ret += f(i + 1, s[1:] + c)
            ret %= 10 ** 9 + 7
    memo[(i, s)] = ret
    return ret


print((f(0, "TTT")))


# Optimized solution
# 2回前までのを保存しておく全探索？
# -> ATGC ACGC AGGC の場合も条件を満たしてしまうので、3つ前までかも（気づくのに長時間かかった）
# -> AGxCの場合も気づかなかった...

# なぜかサンプル3が合わないがコードが間違ってるわけないので表記ミスと判断して提出（傲慢
# -> MODしてないだけだった...

n = int(eval(input()))
if n == 3:
    print((61))
    exit()

memo = {}
MOD = 10**9 + 7


def rec(i, pre3, pre2, pre1):
    if pre3 == "A" and pre2 == "G" and pre1 == "C":
        return 0
    if pre3 == "G" and pre2 == "A" and pre1 == "C":
        return 0
    if pre3 == "A" and pre2 == "C" and pre1 == "G":
        return 0
    if (i, pre1, pre2, pre3) in memo:
        return memo[(i, pre1, pre2, pre3)]
    if i == n - 3:
        return 1
    else:
        ret = 0
        if (pre1 == "G" and pre2 == "A") or (pre1 == "A" and pre2 == "G"):
            ret = rec(i + 1, pre2, pre1, "A") % MOD + rec(
                i + 1, pre2, pre1, "G") % MOD + rec(i + 1, pre2, pre1,
                                                    "T") % MOD
        elif pre1 == "C" and pre2 == "A":
            ret = rec(i + 1, pre2, pre1, "C") % MOD + rec(
                i + 1, pre2, pre1, "A") % MOD + rec(i + 1, pre2, pre1,
                                                    "T") % MOD
        elif pre3 == "A" and pre1 == "G":
            ret = rec(i + 1, pre2, pre1, "A") % MOD + rec(
                i + 1, pre2, pre1, "G") % MOD + rec(i + 1, pre2, pre1,
                                                    "T") % MOD
        elif pre3 == "A" and pre2 == "G":
            ret = rec(i + 1, pre2, pre1, "A") % MOD + rec(
                i + 1, pre2, pre1, "G") % MOD + rec(i + 1, pre2, pre1,
                                                    "T") % MOD
        else:
            ret = rec(i + 1, pre2, pre1,
                      "A") + rec(i + 1, pre2, pre1, "G") % MOD + rec(
                          i + 1, pre2, pre1, "C") % MOD + rec(
                              i + 1, pre2, pre1, "T") % MOD
        ret %= MOD
        memo[(i, pre1, pre2, pre3)] = ret
        return ret


# 最初とりうるやつ（めんどい）
ans = 0
for i in ["A", "G", "C", "T"]:
    for j in ["A", "G", "C", "T"]:
        for k in ["A", "G", "C", "T"]:
            ans += rec(0, i, j, k)

print((ans % MOD))