MAX_NUM = 10 ** 9 + 7



N = eval(input())

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



# def ok(last4):

#   if 'AGC' in last4 or \

#   'GAC' in last4 or \

#   'ACG' in last4 or \

#   last4[0] == 'A' and last4[2:] == 'GC' or \

#   last4[:2] == 'AG' and last4[-1] == 'C':

#     return False

#   return True



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



  if last3 in memo[cur]:

      return memo[cur][last3]



  res = 0

  for c in 'ACGT':

    last4 = last3 + c

    if ok(last4):

      res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM



  memo[cur][last3] = res

  return res



print(dfs(0, 'TTT'))
MAX_NUM = 10 ** 9 + 7



N = input()

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



def ok(last4):

  if 'AGC' in last4 or \

  'GAC' in last4 or \

  'ACG' in last4 or \

  last4[0] == 'A' and last4[2:] == 'GC' or \

  last4[:2] == 'AG' and last4[-1] == 'C':

    return False

  return True



def dfs(cur, last3):

  if cur == N:

    return 1



  if last3 in memo[cur]:

      return memo[cur][last3]



  res = 0

  for c in 'ACGT':

    last4 = last3 + c

    if ok(last4):

      res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM



  memo[cur][last3] = res

  return res



print dfs(0, 'TTT')

MAX_NUM = 10**9 + 7
N = eval(input())
memo = [{} for _ in range(N + 1)]
# def ok(last4):
#   if 'AGC' in last4 or \
#   'GAC' in last4 or \
#   'ACG' in last4 or \
#   last4[0] == 'A' and last4[2:] == 'GC' or \
#   last4[:2] == 'AG' and last4[-1] == 'C':
#     return False
#   return True
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
    if last3 in memo[cur]:
        return memo[cur][last3]
    res = 0
    for c in "ACGT":
        last4 = last3 + c
        if ok(last4):
            res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM
    memo[cur][last3] = res
    return res


print(dfs(0, "TTT"))

MAX_NUM = 10 ** 9 + 7
N = input()
memo = [{} for _ in range(N + 1)]
def ok(last4):
  if 'AGC' in last4 or \
  'GAC' in last4 or \
  'ACG' in last4 or \
  last4[0] == 'A' and last4[2:] == 'GC' or \
  last4[:2] == 'AG' and last4[-1] == 'C':
    return False
  return True
def dfs(cur, last3):
  if cur == N:
    return 1
  if last3 in memo[cur]:
      return memo[cur][last3]
  res = 0
  for c in 'ACGT':
    last4 = last3 + c
    if ok(last4):
      res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM
  memo[cur][last3] = res
  return res
print dfs(0, 'TTT')
-MAX_NUM = 10**9 + 7 -N = eval(input()) +MAX_NUM = 10 ** 9 + 7 +N = input() -# def ok(last4): -#   if 'AGC' in last4 or \ -#   'GAC' in last4 or \ -#   'ACG' in last4 or \ -#   last4[0] == 'A' and last4[2:] == 'GC' or \ -#   last4[:2] == 'AG' and last4[-1] == 'C': -#     return False -#   return True -    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 - - +  if 'AGC' in last4 or \ +  'GAC' in last4 or \ +  'ACG' in last4 or \ +  last4[0] == 'A' and last4[2:] == 'GC' or \ +  last4[:2] == 'AG' and last4[-1] == 'C': +    return False +  return True -    if cur == N: -        return 1 -    if last3 in memo[cur]: -        return memo[cur][last3] -    res = 0 -    for c in "ACGT": -        last4 = last3 + c -        if ok(last4): -            res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM -    memo[cur][last3] = res -    return res - - -print(dfs(0, "TTT")) +  if cur == N: +    return 1 +  if last3 in memo[cur]: +      return memo[cur][last3] +  res = 0 +  for c in 'ACGT': +    last4 = last3 + c +    if ok(last4): +      res = (res + dfs(cur + 1, last4[1:])) % MAX_NUM +  memo[cur][last3] = res +  return res +print dfs(0, 'TTT')