Problem:
Score : 400 points

Problem Statement

You are given an integer N. Find the number of strings of length N that satisfy the following conditions, modulo 10^9+7:

The string does not contain characters other than A, C, G and T.

The string does not contain AGC as a substring.

The condition above cannot be violated by swapping two adjacent characters once.

Notes

A substring of a string T is a string obtained by removing zero or more characters from the beginning and the end of T.

For example, the substrings of ATCODER include TCO, AT, CODER, ATCODER and (the empty string), but not AC.

Constraints

3 \leq N \leq 100

Input

Input is given from Standard Input in the following format:

N

Output

Print the number of strings of length N that satisfy the following conditions, modulo 10^9+7.

Sample Input 1

3

Sample Output 1

61

There are 4^3 = 64 strings of length 3 that do not contain characters other than A, C, G and T. Among them, only AGC, ACG and GAC violate the condition, so the answer is 64 - 3 = 61.

Sample Input 2

4

Sample Output 2

230

Sample Input 3

100

Sample Output 3

388130742

Be sure to print the number of strings modulo 10^9+7.

Solution in Ruby (2.3.3) (judge verdict: Accepted)

N = gets.to_i
MOD = 10 ** 9 + 7

dp = Array.new(N - 1) { Array.new(64, 0) }

64.times do |j|
  dp[0][j] = 1
end

dp[0][6] = 0
dp[0][9] = 0
dp[0][33] = 0

(0..(N - 4)).each do |i|
  64.times do |j|
    white_list = case j
                 when 0
                   # AAA
                   [0, 1, 2, 3]
                 when 1
                   # AAC
                   [4, 5, 7]
                 when 2
                   # AAG
                   [8, 10, 11]
                 when 3
                   # AAT
                   [12, 13, 14, 15]
                 when 4
                   # ACA
                   [0, 1, 2, 3]
                 when 5
                   # ACC
                   [20, 21, 22, 23]
                 when 6
                   # ACG
                   [24, 25, 26, 27]
                 when 7
                   # ACT
                   [28, 29, 30, 31]
                 when 8
                   # AGA
                   [32, 34, 35]
                 when 9
                   # AGC
                   [36, 37, 38, 39]
                 when 10
                   # AGG
                   [40, 42, 43]
                 when 11
                   # AGT
                   [43, 44, 46]
                 when 12
                   # ATA
                   [48, 49, 50, 51]
                 when 13
                   # ATC
                   [52, 53, 54, 55]
                 when 14
                   # ATG
                   [56, 58, 59]
                 when 15
                   # ATT
                   [60, 61, 62, 63]
                 when 16
                   # CAA
                   [0, 1, 2, 3]
                 when 17
                   # CAC
                   [4, 5, 7]
                 when 18
                   # CAG
                   [8, 10, 11]
                 when 19
                   # CAT
                   [12, 13, 14, 15]
                 when 20
                   # CCA
                   [16, 17, 18, 19]
                 when 21
                   # CCC
                   [20, 21, 22, 23]
                 when 22
                   # CCG
                   [24, 25, 26, 27]
                 when 23
                   # CCT
                   [28, 29, 30, 31]
                 when 24
                   # CGA
                   [32, 34, 35]
                 when 25
                   # CGC
                   [36, 37, 38, 39]
                 when 26
                   # CGG
                   [40, 41, 42, 43]
                 when 27
                   # CGT
                   [44, 45, 46, 47]
                 when 28
                   # CTA
                   [48, 49, 50, 51]
                 when 29
                   # CTC
                   [52, 53, 54, 55]
                 when 30
                   # CTG
                   [56, 57, 58, 59]
                 when 31
                   # CTT
                   [60, 61, 62, 63]
                 when 32
                   # GAA
                   [0, 1, 2, 3]
                 when 33
                   # GAC
                   [4, 5, 7]
                 when 34
                   # GAG
                   [8, 10, 11]
                 when 35
                   # GAT
                   [12, 13, 14, 15]
                 when 36
                   # GCA
                   [16, 17, 18, 19]
                 when 37
                   # GCC
                   [20, 21, 22, 23]
                 when 38
                   # GCG
                   [24, 25, 26, 27]
                 when 39
                   # GCT
                   [28, 29, 30, 31]
                 when 40
                   # GGA
                   [32, 34, 35]
                 when 41
                   # GGC
                   [36, 37, 38, 39]
                 when 42
                   # GGG
                   [40, 41, 42, 43]
                 when 43
                   # GGT
                   [44, 45, 46, 47]
                 when 44
                   # GTA
                   [48, 49, 50, 51]
                 when 45
                   # GTC
                   [52, 53, 54, 55]
                 when 46
                   # GTG
                   [56, 57, 58, 59]
                 when 47
                   # GTT
                   [60, 61, 62, 63]
                 when 48
                   # TAA
                   [0, 1, 2, 3]
                 when 49
                   # TAC
                   [4, 5, 7]
                 when 50
                   # TAG
                   [8, 10, 11]
                 when 51
                   # TAT
                   [12, 13, 14, 15]
                 when 52
                   # TCA
                   [16, 17, 18, 19]
                 when 53
                   # TCC
                   [20, 21, 22, 23]
                 when 54
                   # TCG
                   [24, 25, 26, 27]
                 when 55
                   # TCT
                   [28, 29, 30, 31]
                 when 56
                   # TGA
                   [32, 34, 35]
                 when 57
                   # TGC
                   [36, 37, 38, 39]
                 when 58
                   # TGG
                   [40, 41, 42, 43]
                 when 59
                   # TGT
                   [43, 44, 45, 46]
                 when 60
                   # TTA
                   [48, 49, 50, 51]
                 when 61
                   # TTC
                   [52, 53, 54, 55]
                 when 62
                   # TTG
                   [56, 57, 58, 59]
                 when 63
                   # TTT
                   [60, 61, 62, 63]
                 end

    64.times do |k|
      next unless white_list.include?(k)

      dp[i + 1][k] = (dp[i + 1][k] + dp[i][j]) % MOD
    end
  end
end

p dp[N - 3].inject(:+) % MOD