#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,f[10005][100],cho[10005],v[10005];
bool vs[10005][100];
ll dfs(int nw,int k)
{
if(vs[nw][k]&&nw!=n)return f[nw][k];
vs[nw][k]=1;
cho[nw]=k;
if(nw==n)
{
int cnt=cho[nw]+cho[nw-1];
if(cnt!=v[nw])return 0;
else return 1;
}
else if(nw==1&&n!=1)//考虑本身
{
if(k==1)//猜测这一个是雷
{
if(v[nw]<1||v[nw]>2)return f[nw][k]=0;//分类讨论有几个
else if(v[nw]==1)f[nw][k]+=dfs(nw+1,0);
else if(v[nw]==2)f[nw][k]+=dfs(nw+1,1);
}
else if(k==0)//这一格不是
{
if(v[nw]<0||v[nw]>1)return f[nw][k]=0;
else if(v[nw]==0)f[nw][k]+=dfs(nw+1,0);
else if(v[nw]==1)f[nw][k]+=dfs(nw+1,1);
}
}
else if(nw>1&&nw<n){//在考虑本身的同时考虑上方
int cnt=cho[nw]+cho[nw-1];
if(cnt==0)
{
if(v[nw]<0||v[nw]>1)return f[nw][k]=0;
else if(v[nw]==0)f[nw][k]+=dfs(nw+1,0);
else if(v[nw]==1)f[nw][k]+=dfs(nw+1,1);
}
else if(cnt==1)
{
if(v[nw]<1||v[nw]>2)return f[nw][k]=0;
else if(v[nw]==1)f[nw][k]+=dfs(nw+1,0);
else if(v[nw]==2)f[nw][k]+=dfs(nw+1,1);
}
else if(cnt==2)
{
if(v[nw]<2||v[nw]>3)return f[nw][k]=0;
else if(v[nw]==2)f[nw][k]+=dfs(nw+1,0);
else if(v[nw]==3)f[nw][k]+=dfs(nw+1,1);
}
}
return f[nw][k];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>v[i];
cout<<dfs(1,1)+dfs(1,0);
return 0;
}