Language: C++

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#include<cmath>
#include<bitset>
#define ll long long
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define FFOR(i,a,b) for(int i=(a);i<=(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define RREP(i,n)  FFOR(i,0,n)
#define SORT(V) sort((V).begin(),(V).end())
#define INF ((1LL<<62)-(1LL<<31))
#define MOD 1000000007
using namespace std;

int main(){
  ll N,ans=0;
  cin>>N;
  DP[N+1][4][4][4]; // DP[i][a][b][c] 直前の文字が順にa,b,cである時のi番目の場合の数 
  // A0 G1 C2 T3 とする
  
  DP[3][0][0][0]=1;
  DP[3][0][0][1]=1;
  DP[3][0][0][2]=1;
  DP[3][0][0][3]=1;
  
  DP[3][0][1][0]=1;
  DP[3][0][1][1]=1;
  DP[3][0][1][2]=0;
  DP[3][0][1][3]=1;
  
  DP[3][0][2][0]=1;
  DP[3][0][2][1]=0;
  DP[3][0][2][2]=1;
  DP[3][0][2][3]=1;
  
  DP[3][0][3][0]=1;
  DP[3][0][3][1]=1;
  DP[3][0][3][2]=1;
  DP[3][0][3][3]=1;
  
  
  DP[3][1][0][0]=1;
  DP[3][1][0][1]=1;
  DP[3][1][0][2]=0;
  DP[3][1][0][3]=1;
  
  DP[3][1][1][0]=1;
  DP[3][1][1][1]=1;
  DP[3][1][1][2]=1;
  DP[3][1][1][3]=1;
  
  DP[3][1][2][0]=1;
  DP[3][1][2][1]=1;
  DP[3][1][2][2]=1;
  DP[3][1][2][3]=1;
  
  DP[3][1][3][0]=1;
  DP[3][1][3][1]=1;
  DP[3][1][3][2]=1;
  DP[3][1][3][3]=1;
  
  
  DP[3][2][0][0]=1;
  DP[3][2][0][1]=1;
  DP[3][2][0][2]=1;
  DP[3][2][0][3]=1;
  
  DP[3][2][1][0]=1;
  DP[3][2][1][1]=1;
  DP[3][2][1][2]=1;
  DP[3][2][1][3]=1;
  
  DP[3][2][2][0]=1;
  DP[3][2][2][1]=1;
  DP[3][2][2][2]=1;
  DP[3][2][2][3]=1;
  
  DP[3][2][3][0]=1;
  DP[3][2][3][1]=1;
  DP[3][2][3][2]=1;
  DP[3][2][3][3]=1;
  
  
  DP[3][3][0][0]=1;
  DP[3][3][0][1]=1;
  DP[3][3][0][2]=1;
  DP[3][3][0][3]=1;
  
  DP[3][3][1][0]=1;
  DP[3][3][1][1]=1;
  DP[3][3][1][2]=1;
  DP[3][3][1][3]=1;
  
  DP[3][3][2][0]=1;
  DP[3][3][2][1]=1;
  DP[3][3][2][2]=1;
  DP[3][3][2][3]=1;
  
  DP[3][3][3][0]=1;
  DP[3][3][3][1]=1;
  DP[3][3][3][2]=1;
  DP[3][3][3][3]=1;
  
  
  
  FFOR(i,4,N){
    DP[i][0][0][0]=(DP[i-1][0][0][0]+DP[i-1][1][0][0]+DP[i-1][2][0][0]+DP[i-1][3][0][0])%MOD;
    DP[i][0][0][1]=(DP[i-1][0][0][0]+DP[i-1][1][0][0]+DP[i-1][2][0][0]+DP[i-1][3][0][0])%MOD;
    DP[i][0][0][2]=(DP[i-1][0][0][0]+DP[i-1][1][0][0]+DP[i-1][2][0][0]+DP[i-1][3][0][0])%MOD;
    DP[i][0][0][3]=(DP[i-1][0][0][0]+DP[i-1][1][0][0]+DP[i-1][2][0][0]+DP[i-1][3][0][0])%MOD;
    
    DP[i][0][1][0]=(DP[i-1][0][0][1]+DP[i-1][1][0][1]+DP[i-1][2][0][1]+DP[i-1][3][0][1])%MOD;
    DP[i][0][1][1]=(DP[i-1][0][0][1]+DP[i-1][1][0][1]+DP[i-1][2][0][1]+DP[i-1][3][0][1])%MOD;
    DP[i][0][1][2]=(DP[i-1][0][0][1]+DP[i-1][1][0][1]+DP[i-1][2][0][1]+DP[i-1][3][0][1])%MOD;
    DP[i][0][1][3]=(DP[i-1][0][0][1]+DP[i-1][1][0][1]+DP[i-1][2][0][1]+DP[i-1][3][0][1])%MOD;
    
    DP[i][0][2][0]=(DP[i-1][0][0][2]+DP[i-1][1][0][2]+DP[i-1][2][0][2]+DP[i-1][3][0][2])%MOD;
    DP[i][0][2][1]=(DP[i-1][0][0][2]+DP[i-1][1][0][2]+DP[i-1][2][0][2]+DP[i-1][3][0][2])%MOD;
    DP[i][0][2][2]=(DP[i-1][0][0][2]+DP[i-1][1][0][2]+DP[i-1][2][0][2]+DP[i-1][3][0][2])%MOD;
    DP[i][0][2][3]=(DP[i-1][0][0][2]+DP[i-1][1][0][2]+DP[i-1][2][0][2]+DP[i-1][3][0][2])%MOD;
    
    DP[i][0][3][0]=(DP[i-1][0][0][3]+DP[i-1][1][0][3]+DP[i-1][2][0][3]+DP[i-1][3][0][3])%MOD;
    DP[i][0][3][1]=(DP[i-1][0][0][3]+DP[i-1][1][0][3]+DP[i-1][2][0][3]+DP[i-1][3][0][3])%MOD;
    DP[i][0][3][2]=(DP[i-1][0][0][3]+DP[i-1][1][0][3]+DP[i-1][2][0][3]+DP[i-1][3][0][3])%MOD;
    DP[i][0][3][3]=(DP[i-1][0][0][3]+DP[i-1][1][0][3]+DP[i-1][2][0][3]+DP[i-1][3][0][3])%MOD;
    
    
    DP[i][1][0][0]=(DP[i-1][0][1][0]+DP[i-1][1][1][0]+DP[i-1][2][1][0]+DP[i-1][3][1][0])%MOD;
    DP[i][1][0][1]=(DP[i-1][0][1][0]+DP[i-1][1][1][0]+DP[i-1][2][1][0]+DP[i-1][3][1][0])%MOD;
    DP[i][1][0][2]=(DP[i-1][0][1][0]+DP[i-1][1][1][0]+DP[i-1][2][1][0]+DP[i-1][3][1][0])%MOD;
    DP[i][1][0][3]=(DP[i-1][0][1][0]+DP[i-1][1][1][0]+DP[i-1][2][1][0]+DP[i-1][3][1][0])%MOD;
    
    DP[i][1][1][0]=(DP[i-1][0][1][1]+DP[i-1][1][1][1]+DP[i-1][2][1][1]+DP[i-1][3][1][1])%MOD;
    DP[i][1][1][1]=(DP[i-1][0][1][1]+DP[i-1][1][1][1]+DP[i-1][2][1][1]+DP[i-1][3][1][1])%MOD;
    DP[i][1][1][2]=(DP[i-1][0][1][1]+DP[i-1][1][1][1]+DP[i-1][2][1][1]+DP[i-1][3][1][1])%MOD;
    DP[i][1][1][3]=(DP[i-1][0][1][1]+DP[i-1][1][1][1]+DP[i-1][2][1][1]+DP[i-1][3][1][1])%MOD;
    
    DP[i][1][2][0]=(DP[i-1][0][1][2]+DP[i-1][1][1][2]+DP[i-1][2][1][2]+DP[i-1][3][1][2])%MOD;
    DP[i][1][2][1]=(DP[i-1][0][1][2]+DP[i-1][1][1][2]+DP[i-1][2][1][2]+DP[i-1][3][1][2])%MOD;
    DP[i][1][2][2]=(DP[i-1][0][1][2]+DP[i-1][1][1][2]+DP[i-1][2][1][2]+DP[i-1][3][1][2])%MOD;
    DP[i][1][2][3]=(DP[i-1][0][1][2]+DP[i-1][1][1][2]+DP[i-1][2][1][2]+DP[i-1][3][1][2])%MOD;
    
    DP[i][1][3][0]=(DP[i-1][0][1][3]+DP[i-1][1][1][3]+DP[i-1][2][1][3]+DP[i-1][3][1][3])%MOD;
    DP[i][1][3][1]=(DP[i-1][0][1][3]+DP[i-1][1][1][3]+DP[i-1][2][1][3]+DP[i-1][3][1][3])%MOD;
    DP[i][1][3][2]=(DP[i-1][0][1][3]+DP[i-1][1][1][3]+DP[i-1][2][1][3]+DP[i-1][3][1][3])%MOD;
    DP[i][1][3][3]=(DP[i-1][0][1][3]+DP[i-1][1][1][3]+DP[i-1][2][1][3]+DP[i-1][3][1][3])%MOD;
    
    
    DP[i][2][0][0]=(DP[i-1][0][2][0]+DP[i-1][1][2][0]+DP[i-1][2][2][0]+DP[i-1][3][2][0])%MOD;
    DP[i][2][0][1]=(DP[i-1][0][2][0]+DP[i-1][1][2][0]+DP[i-1][2][2][0]+DP[i-1][3][2][0])%MOD;
    DP[i][2][0][2]=(DP[i-1][0][2][0]+DP[i-1][1][2][0]+DP[i-1][2][2][0]+DP[i-1][3][2][0])%MOD;
    DP[i][2][0][3]=(DP[i-1][0][2][0]+DP[i-1][1][2][0]+DP[i-1][2][2][0]+DP[i-1][3][2][0])%MOD;
    
    DP[i][2][1][0]=(DP[i-1][0][2][1]+DP[i-1][1][2][1]+DP[i-1][2][2][1]+DP[i-1][3][2][1])%MOD;
    DP[i][2][1][1]=(DP[i-1][0][2][1]+DP[i-1][1][2][1]+DP[i-1][2][2][1]+DP[i-1][3][2][1])%MOD;
    DP[i][2][1][2]=(DP[i-1][0][2][1]+DP[i-1][1][2][1]+DP[i-1][2][2][1]+DP[i-1][3][2][1])%MOD;
    DP[i][2][1][3]=(DP[i-1][0][2][1]+DP[i-1][1][2][1]+DP[i-1][2][2][1]+DP[i-1][3][2][1])%MOD;
    
    DP[i][2][2][0]=(DP[i-1][0][2][2]+DP[i-1][1][2][2]+DP[i-1][2][2][2]+DP[i-1][3][2][2])%MOD;
    DP[i][2][2][1]=(DP[i-1][0][2][2]+DP[i-1][1][2][2]+DP[i-1][2][2][2]+DP[i-1][3][2][2])%MOD;
    DP[i][2][2][2]=(DP[i-1][0][2][2]+DP[i-1][1][2][2]+DP[i-1][2][2][2]+DP[i-1][3][2][2])%MOD;
    DP[i][2][2][3]=(DP[i-1][0][2][2]+DP[i-1][1][2][2]+DP[i-1][2][2][2]+DP[i-1][3][2][2])%MOD;
    
    DP[i][2][3][0]=(DP[i-1][0][2][3]+DP[i-1][1][2][3]+DP[i-1][2][2][3]+DP[i-1][3][2][3])%MOD;
    DP[i][2][3][1]=(DP[i-1][0][2][3]+DP[i-1][1][2][3]+DP[i-1][2][2][3]+DP[i-1][3][2][3])%MOD;
    DP[i][2][3][2]=(DP[i-1][0][2][3]+DP[i-1][1][2][3]+DP[i-1][2][2][3]+DP[i-1][3][2][3])%MOD;
    DP[i][2][3][3]=(DP[i-1][0][2][3]+DP[i-1][1][2][3]+DP[i-1][2][2][3]+DP[i-1][3][2][3])%MOD;
    
    
    DP[i][3][0][0]=(DP[i-1][0][3][0]+DP[i-1][1][3][0]+DP[i-1][2][3][0]+DP[i-1][3][3][0])%MOD;
    DP[i][3][0][1]=(DP[i-1][0][3][0]+DP[i-1][1][3][0]+DP[i-1][2][3][0]+DP[i-1][3][3][0])%MOD;
    DP[i][3][0][2]=(DP[i-1][0][3][0]+DP[i-1][1][3][0]+DP[i-1][2][3][0]+DP[i-1][3][3][0])%MOD;
    DP[i][3][0][3]=(DP[i-1][0][3][0]+DP[i-1][1][3][0]+DP[i-1][2][3][0]+DP[i-1][3][3][0])%MOD;
    
    DP[i][3][1][0]=(DP[i-1][0][3][1]+DP[i-1][1][3][1]+DP[i-1][2][3][1]+DP[i-1][3][3][1])%MOD;
    DP[i][3][1][1]=(DP[i-1][0][3][1]+DP[i-1][1][3][1]+DP[i-1][2][3][1]+DP[i-1][3][3][1])%MOD;
    DP[i][3][1][2]=(DP[i-1][0][3][1]+DP[i-1][1][3][1]+DP[i-1][2][3][1]+DP[i-1][3][3][1])%MOD;
    DP[i][3][1][3]=(DP[i-1][0][3][1]+DP[i-1][1][3][1]+DP[i-1][2][3][1]+DP[i-1][3][3][1])%MOD;
    
    DP[i][3][2][0]=(DP[i-1][0][3][2]+DP[i-1][1][3][2]+DP[i-1][2][3][2]+DP[i-1][3][3][2])%MOD;
    DP[i][3][2][1]=(DP[i-1][0][3][2]+DP[i-1][1][3][2]+DP[i-1][2][3][2]+DP[i-1][3][3][2])%MOD;
    DP[i][3][2][2]=(DP[i-1][0][3][2]+DP[i-1][1][3][2]+DP[i-1][2][3][2]+DP[i-1][3][3][2])%MOD;
    DP[i][3][2][3]=(DP[i-1][0][3][2]+DP[i-1][1][3][2]+DP[i-1][2][3][2]+DP[i-1][3][3][2])%MOD;
    
    DP[i][3][3][0]=(DP[i-1][0][3][3]+DP[i-1][1][3][3]+DP[i-1][2][3][3]+DP[i-1][3][3][3])%MOD;
    DP[i][3][3][1]=(DP[i-1][0][3][3]+DP[i-1][1][3][3]+DP[i-1][2][3][3]+DP[i-1][3][3][3])%MOD;
    DP[i][3][3][2]=(DP[i-1][0][3][3]+DP[i-1][1][3][3]+DP[i-1][2][3][3]+DP[i-1][3][3][3])%MOD;
    DP[i][3][3][3]=(DP[i-1][0][3][3]+DP[i-1][1][3][3]+DP[i-1][2][3][3]+DP[i-1][3][3][3])%MOD;
  }
  
  REP(i,4){
    REP(j,4){
      REP(k,4){
        ans+=DP[N][i][j][k]%MOD;
      }
    }
  }
  
  cout<<ans<<endl;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:21:3: error: 'DP' was not declared in this scope
   21 |   DP[N+1][4][4][4]; // DP[i][a][b][c] 直前の文字が順にa,b,cである時のi番目の場合の数
      |   ^~