|  | @@ -0,0 +1,29 @@
 | 
	
		
			
				|  |  | +const MOD int = 1000000007
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func checkRecord(n int) int {
 | 
	
		
			
				|  |  | +	// A, L, P
 | 
	
		
			
				|  |  | +	var dp = [2][3]int{{1, 1, 0}, {1, 0, 0}}
 | 
	
		
			
				|  |  | +	for i := 1; i < n; i++ {
 | 
	
		
			
				|  |  | +		var nxt [2][3]int
 | 
	
		
			
				|  |  | +		for A := 0; A <= 1; A++ {
 | 
	
		
			
				|  |  | +			for L := 0; L <= 2; L++ {
 | 
	
		
			
				|  |  | +				nxt[A][0] += dp[A][L] // Append P
 | 
	
		
			
				|  |  | +				if L > 0 {
 | 
	
		
			
				|  |  | +					nxt[A][L] += dp[A][L-1] // Append L
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if A > 0 {
 | 
	
		
			
				|  |  | +					nxt[A][0] += dp[A-1][L] // Append A
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				nxt[A][L] %= MOD
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		dp = nxt
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	sum := 0
 | 
	
		
			
				|  |  | +	for i := range dp {
 | 
	
		
			
				|  |  | +		for _, v := range dp[i] {
 | 
	
		
			
				|  |  | +			sum = (sum + v) % MOD
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return sum
 | 
	
		
			
				|  |  | +}
 |