#include <bits/stdc++.h>
using namespace std;
int n,a[10010],ans;bool b[10010],c[10010],flag=true;
void dfs(int now){
if(a[now]==1){
if(b[now-1]==false){
if(b[now]==false)b[now+1]=true;
else if(b[now+1]==false)b[now]=true;
else return;
}
else if(b[now]==true || b[now+1]==true)return;
}
else if(a[now]==2){
if(b[now-1]==false){
if(b[now]==false || b[now+1]==false)return;
else b[now]=true,b[now+1]=true;
}
else {
if(b[now]==true && b[now+1]==true)return;
else if(b[now]==false)b[now+1]=true;
else if(b[now+1]==false)b[now]=true;
else if(b[now]==false && b[now+1]==false){
for(int i=0;i<2;i++)b[now]=i,dfs(now+1);
}
}
}
else if(a[now]==3){
if(b[now-1]==false || b[now]==false || b[now+1]==false)return;
b[now-1]=b[now]=b[now+1]=true;
}
if(now==n && flag==true){ans++;flag=false;return;}
dfs(now+1);
}
int main(){
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
if(a[0]>=3 || a[n-1]>=3){cout<<0<<endl;return 0;}
b[0]=true;
dfs(0);
memset(b,false,sizeof(b));memset(c,false,sizeof(c));flag=true;
dfs(0);
cout<<ans<<endl;
return 0;
}