#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int NEXT_CELL[] = {0, 1, 1, 1, 0, 1, 1, 0}; const int MOD = 1000000007; int main() { int n; cin >> n; vector e(n); for(int i=0; i> e[i]; int ans = 0; for(int init=0; init<4; ++init){ vector dp(4, 0); dp[init] = 1; for(int i=0; i nextDp(4, 0); for(int a=0; a<4; ++a){ for(int j=0; j<2; ++j){ int b = (a << 1) | j; if(NEXT_CELL[b] == e[i]){ b &= 3; nextDp[b] += dp[a]; nextDp[b] %= MOD; } } } dp.swap(nextDp); } ans += dp[init]; ans %= MOD; } cout << ans << endl; return 0; }