#include<bits/stdc++.h>

using namespace std;

long long dp[505][505];
int jedinice,nule;

bool provera(int prvi, int drugi,int treci,int cetvrti,int *A)
{
    jedinice=0;
    nule=0;
    if(A[prvi+1]==1)
        jedinice++;
    else nule++;
    if(A[drugi+1]==1)
        jedinice++;
    else nule++;
    if(A[treci+1]==1)
        jedinice++;
    else nule++;
    if(A[cetvrti+1]==1)
        jedinice++;
    else nule++;
    return (jedinice==3 || nule==3);
}

int obrada(int pocetak,int kraj,int *A)
{
    if(pocetak==kraj)
    {
        return 1;
    }
    if(dp[pocetak][kraj]!=0)
        return dp[pocetak][kraj];
    long long pom=1;
    long long sum=0;
    for(int i=pocetak+1;i<kraj;i+=4)
        for(int j=i+1;j<kraj;j+=4)
            for(int k=j+1;k<kraj;k+=4)
    {
        if(provera(pocetak,i,j,k,A))
        {
            pom=1;
            pom*=obrada(pocetak+1,i,A);
            if(pom==0)
                continue;
            pom=pom%(1000000007);
            pom*=obrada(i+1,j,A);
            if(pom==0)
                continue;
            pom=pom%(1000000007);
            pom*=obrada(j+1,k,A);
            if(pom==0)
                continue;
            pom=pom%(1000000007);
            pom*=obrada(k+1,kraj,A);
            if(pom==0)
                continue;
            pom=pom%(1000000007);
            sum+=pom;
            sum=sum%(1000000007);
        }
    }
    dp[pocetak][kraj]=sum;
    return sum;
}

int Zvezda(int N, int* A)
{
    return obrada(0,N,A)%(1000000000+7);
	return 0;
}