# ちーともわからんので解説見た

# ら、悔しさあふれる感じ

# 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")))

# 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))

# ちーともわからんので解説見た
# ら、悔しさあふれる感じ
# 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")))

# 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))

-# ちーともわからんので解説見た -# ら、悔しさあふれる感じ -# 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! +# 2回前までのを保存しておく全探索？ +# -> ATGC ACGC AGGC の場合も条件を満たしてしまうので、3つ前までかも（気づくのに長時間かかった） +# -> AGxCの場合も気づかなかった... +# なぜかサンプル3が合わないがコードが間違ってるわけないので表記ミスと判断して提出（傲慢 +# -> MODしてないだけだった... +if n == 3: +    print((61)) +    exit() +MOD = 10**9 + 7 -def f(i, s): -    if (i, s) in memo: -        return memo[(i, s)] -    if i == n: +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: -    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 +    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 -print((f(0, "TTT"))) +# 最初とりうるやつ（めんどい） +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))