#include<bits/stdc++.h>
using namespace std;
const long long MOD=1e9+7;
long long k;
long long c[25];
long long zt[15][15][15][15][15][15];
long long sl[15];
long long dfs(long long s1,long long s2,long long s3,long long s4,long long s5,long long la){
if(zt[s1][s2][s3][s4][s5][la]!=-1) return zt[s1][s2][s3][s4][s5][la];
if(!s1&&!s2&&!s3&&!s4&&!s5) return 1;
long long sum=0;
if(s1) sum=(sum+(s1-(la==2))*dfs(s1-1,s2,s3,s4,s5,1)%MOD)%MOD;
if(s2) sum=(sum+(s2-(la==3))*dfs(s1+1,s2-1,s3,s4,s5,2)%MOD)%MOD;
if(s3) sum=(sum+(s3-(la==4))*dfs(s1,s2+1,s3-1,s4,s5,3)%MOD)%MOD;
if(s4) sum=(sum+(s4-(la==5))*dfs(s1,s2,s3+1,s4-1,s5,4)%MOD)%MOD;
if(s5) sum=(sum+s5*dfs(s1,s2,s3,s4+1,s5-1,5)%MOD)%MOD;
zt[s1][s2][s3][s4][s5][la]=sum%MOD;
return sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>k;
for(long long i=1;i<=k;i++){
cin>>c[i];
sl[c[i]]++;
}
memset(zt,-1,sizeof zt);
long long jg=dfs(sl[1],sl[2],sl[3],sl[4],sl[5],-1)%MOD;
cout<<jg;
return 0;
}