#include using namespace std; using Int = long long; template vector make_v(size_t a){return vector(a);} template vector > make_v(size_t a,size_t b){ return vector >(a,make_v(b)); } template vector > > make_v(size_t a,size_t b,size_t c){ return vector > > (a,make_v(b,c)); } template vector > > > make_v(size_t a,size_t b,size_t c,size_t d){ return vector > > > (a,make_v(b,c,d)); } template vector > > > > make_v(size_t a,size_t b,size_t c,size_t d,size_t e){ return vector > > > >(a,make_v(b,c,d,e)); } template typename enable_if::value==0>::type fill_v(T &t,const V &v){t=v;} template typename enable_if::value!=0>::type fill_v(T &t,const V &v){ for(auto &e:t) fill_v(e,v); } //INSERT ABOVE HERE signed main(){ Int n; cin>>n; vector e(n); for(Int i=0;i>e[i]; auto dp=make_v(2,2,2,2,n+1); fill_v(dp,0); for(Int a=0;a<2;a++) for(Int b=0;b<2;b++) dp[a][b][a][b][1]=1; auto calc=[](Int x,Int y,Int z){ if(x==0&&y==0&&z==0) return 0; if(x==0&&y==0&&z==1) return 1; if(x==0&&y==1&&z==0) return 1; if(x==0&&y==1&&z==1) return 1; if(x==1&&y==0&&z==0) return 0; if(x==1&&y==0&&z==1) return 1; if(x==1&&y==1&&z==0) return 1; if(x==1&&y==1&&z==1) return 0; return 0; }; Int ans=0; const Int MOD= 1e9+7; for(Int i=1;i