1 #define maxn 1000000
2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
3 #define pb push_back
4 #define MOD 1000000007
5
6 class Solution
7 {
8 public:
9 int checkRecord(int n)
10 {
11 long long int dp[2][2][3] {0};
12
13 dp[0][0][0] = dp[0][0][1] = dp[0][1][0] = 1;
14
15 _for(i,2,n+1)
16 {
17 if(!(i&0x1))
18 {
19 dp[1][0][0] = (dp[0][0][0]+dp[0][0][1]+dp[0][0][2])%MOD;
20 dp[1][0][1] = dp[0][0][0];
21 dp[1][0][2] = dp[0][0][1];
22 dp[1][1][0] = ((dp[0][0][0]+dp[0][0][1])%MOD+(dp[0][0][2]+dp[0][1][0])%MOD+(dp[0][1][1]+dp[0][1][2])%MOD)%MOD;
23 dp[1][1][1] = dp[0][1][0];
24 dp[1][1][2] = dp[0][1][1];
25 }
26 else
27 {
28 dp[0][0][0] = (dp[1][0][0]+dp[1][0][1]+dp[1][0][2])%MOD;
29 dp[0][0][1] = dp[1][0][0];
30 dp[0][0][2] = dp[1][0][1];
31 dp[0][1][0] = ((dp[1][0][0]+dp[1][0][1])%MOD+(dp[1][0][2]+dp[1][1][0])%MOD+(dp[1][1][1]+dp[1][1][2])%MOD)%MOD;
32 dp[0][1][1] = dp[1][1][0];
33 dp[0][1][2] = dp[1][1][1];
34 }
35 }
36 if(!(n&0x1))
37 n = 1;
38 else
39 n = 0;
40 int rnt = (dp[n][0][0]+dp[n][0][1]+dp[n][0][2]
41 +dp[n][1][0]+dp[n][1][1]+dp[n][1][2])%MOD;
42
43 return rnt;
44 }
45 };