#include<bits/stdc++.h>
#define maxn 505
#define MOD 1000000007
using namespace std;

long long dp[maxn][maxn][4];
/*
[4] koliko nula je bilo do sada
*/
int b[maxn];

int Zvezda(int n,int a[])
{
    for(int i=0;i<n;i++)b[i]=a[i+1];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            for(int bb=0;bb<4;bb++)
            {
                dp[i][j][bb]=0LL;
            }

    for(int i=1;i<=n;i++)
    {
        dp[i][i][b[i]==0]=1LL;
    }

    for(int d=1;d<=n;d++)
        for(int i=0;i<n;i++)
        {
            int kraj=(i+d)%n;
            for(int br0=0;br0<4;br0++)
            {
                int ukL=4-d%4;
                if(ukL==4)ukL=0;
                int br1=ukL-br0;

                int boja=2;
                if(br1==3)boja=0;
                else if(br0==3)boja=1;
                else if(ukL==3)
                {
                    if(br0==1)boja=0;
                    else boja=1;
                }

                for(int j=0;j<d;j+=4)
                {
                    int p=(i+j)%n;
                    int pre=(p-1+n)%n;
                    int posle=(p+1)%n;

                    if(boja!=2 && boja!=b[p])continue;

                    long long preee=1LL;
                    if(j!=0)
                    {
                        preee=dp[i][pre][br0 - (b[p]==0)];
                    }

                    long long posleee=1LL;
                    if(j!=d-1)
                    {
                        int nule=br0 + (b[p]==0);
                        if(ukL==3)nule=0;

                        posleee=dp[posle][kraj][nule];
                    }

                    dp[i][j][br0]+=(preee*posleee)%MOD;
                    dp[i][j][br0]%=MOD;
                }
            }
        }


    return dp[0][n-1][0];
}