#include using namespace std; #define fst(t) std::get<0>(t) #define snd(t) std::get<1>(t) #define thd(t) std::get<2>(t) #define unless(p) if(!(p)) #define until(p) while(!(p)) using ll = long long; using P = std::tuple; const int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}, dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; int es[2100], dp[2100][8]; const int MOD = 1e9 + 7; int main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); int N; std::cin >> N; for(int i=0;i> es[i]; } int res = 0; for(int i=0;i<4;++i){ memset(dp, 0, sizeof(dp)); dp[1][i] = 1; for(int j=1;j> (k * 2) & 1) == es[j]){ dp[j+1][k%2*2] = (dp[j+1][k%2*2] + dp[j][k]) % MOD; } if((110 >> (k * 2 + 1) & 1) == es[j]){ dp[j+1][k%2*2+1] = (dp[j+1][k%2*2+1] + dp[j][k]) % MOD; } } } for(int k=0;k<4;++k){ if((k & 1) != (i >> 1)){ continue; } if((110 >> ((k << 1) | i) & 1) == es[0]){ res = (res + dp[N][k]) % MOD; } } } std::cout << res << std::endl; }