N, MOD = int(eval(input())), 10 ** 9 + 7

memo = [{} for i in range(N+1)]

def ok(last4):

    for i in range(4):

        t = list(last4)

        if i >= 1:

            t[i-1], t[i] = t[i], t[i-1]

        if ''.join(t).count('AGC') >= 1:

            return False

    return True

def dfs(cur, last3):

    if last3 in memo[cur]:

        return memo[cur][last3]

    if cur == N:

        return 1

    ret = 0

    for c in 'ACGT':

        if ok(last3 + c):

            ret = (ret + dfs(cur + 1, last3[1:] + c)) % MOD

    memo[cur][last3] = ret

    return ret

print((dfs(0, 'TTT')))
N = int(eval(input()))

MOD = 10 ** 9 + 7

memo = [{} for _ in range(N)]

def ok(last4):

    for i in range(4):

        t = list(last4)

        if i >= 1:

            t[i-1], t[i] = t[i], t[i-1]

        if 'AGC' in ''.join(t):

            return False

    return True

def dfs(cur, last3):

    if cur == N:

        return 1

    elif last3 in memo[cur]:

        return memo[cur][last3]

    else:

        ret = 0

        for c in 'ACGT':

            if ok(last3 + c):

                ret += dfs(cur + 1, last3[1:] + c)

        ret = ret % MOD

        memo[cur][last3] = ret

        return ret

print((dfs(0, '   ')))
N, MOD = int(eval(input())), 10**9 + 7
memo = [{} for i in range(N + 1)]


def ok(last4):
    for i in range(4):
        t = list(last4)
        if i >= 1:
            t[i - 1], t[i] = t[i], t[i - 1]
        if "".join(t).count("AGC") >= 1:
            return False
    return True


def dfs(cur, last3):
    if last3 in memo[cur]:
        return memo[cur][last3]
    if cur == N:
        return 1
    ret = 0
    for c in "ACGT":
        if ok(last3 + c):
            ret = (ret + dfs(cur + 1, last3[1:] + c)) % MOD
    memo[cur][last3] = ret
    return ret


print((dfs(0, "TTT")))

N = int(eval(input()))
MOD = 10**9 + 7
memo = [{} for _ in range(N)]


def ok(last4):
    for i in range(4):
        t = list(last4)
        if i >= 1:
            t[i - 1], t[i] = t[i], t[i - 1]
        if "AGC" in "".join(t):
            return False
    return True


def dfs(cur, last3):
    if cur == N:
        return 1
    elif last3 in memo[cur]:
        return memo[cur][last3]
    else:
        ret = 0
        for c in "ACGT":
            if ok(last3 + c):
                ret += dfs(cur + 1, last3[1:] + c)
        ret = ret % MOD
        memo[cur][last3] = ret
        return ret


print((dfs(0, "   ")))

-N, MOD = int(eval(input())), 10**9 + 7 -memo = [{} for i in range(N + 1)] +N = int(eval(input())) +MOD = 10**9 + 7 +memo = [{} for _ in range(N)] -        if "".join(t).count("AGC") >= 1: +        if "AGC" in "".join(t): -    if last3 in memo[cur]: -        return memo[cur][last3] -    ret = 0 -    for c in "ACGT": -        if ok(last3 + c): -            ret = (ret + dfs(cur + 1, last3[1:] + c)) % MOD -    memo[cur][last3] = ret -    return ret +    elif last3 in memo[cur]: +        return memo[cur][last3] +    else: +        ret = 0 +        for c in "ACGT": +            if ok(last3 + c): +                ret += dfs(cur + 1, last3[1:] + c) +        ret = ret % MOD +        memo[cur][last3] = ret +        return ret -print((dfs(0, "TTT"))) +print((dfs(0, "   ")))