classSolution{public:intcheckRecord(intn){constexprintkMod=1'000'000'007;// dp[i][j] := length so far w/ i A's and the latest chars are j L'svector<vector<long>>dp(2,vector<long>(3));dp[0][0]=1;while(n--){constautoprev(dp);// Append Pdp[0][0]=(prev[0][0]+prev[0][1]+prev[0][2])%kMod;// Append Ldp[0][1]=prev[0][0];// Append Ldp[0][2]=prev[0][1];// Append A or append Pdp[1][0]=(prev[0][0]+prev[0][1]+prev[0][2]+prev[1][0]+prev[1][1]+prev[1][2])%kMod;// Append Ldp[1][1]=prev[1][0];// Append Ldp[1][2]=prev[1][1];}returnaccumulate(begin(dp),end(dp),0,[](ints,vector<long>&row){return(s+accumulate(begin(row),end(row),0L))%kMod;});}};
classSolution{publicintcheckRecord(intn){finalintkMod=1_000_000_007;// dp[i][j] := length so far w/ i A's and the latest chars are j L'slong[][]dp=newlong[2][3];dp[0][0]=1;while(n-->0){long[][]prev=Arrays.stream(dp).map((long[]A)->A.clone()).toArray((intlength)->newlong[length][]);// Append Pdp[0][0]=(prev[0][0]+prev[0][1]+prev[0][2])%kMod;// Append Ldp[0][1]=prev[0][0];// Append Ldp[0][2]=prev[0][1];// Append A or append Pdp[1][0]=(prev[0][0]+prev[0][1]+prev[0][2]+prev[1][0]+prev[1][1]+prev[1][2])%kMod;// Append Ldp[1][1]=prev[1][0];// Append Ldp[1][2]=prev[1][1];}return(int)((dp[0][0]+dp[0][1]+dp[0][2]+dp[1][0]+dp[1][1]+dp[1][2])%kMod);}}
classSolution:defcheckRecord(self,n:int)->int:kMod=1_000_000_007# dp[i][j] := length so far w/ i A's and the latest chars are j L'sdp=[[0]*3for_inrange(2)]dp[0][0]=1for_inrange(n):prev=[A[:]forAindp]# Append Pdp[0][0]=(prev[0][0]+prev[0][1]+prev[0][2])%kMod# Append Ldp[0][1]=prev[0][0]# Append Ldp[0][2]=prev[0][1]# Append A or append Pdp[1][0]=(prev[0][0]+prev[0][1]+prev[0][2]+prev[1][0]+prev[1][1]+prev[1][2])%kMod# Append Ldp[1][1]=prev[1][0]# Append Ldp[1][2]=prev[1][1]return(sum(dp[0])+sum(dp[1]))%kMod