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

int pref[505];
int mem[505][505];
int a[505];

int solve(int l,int r)
{
    if(mem[l][r]!=-1)
    {
        return mem[l][r];
    }
    if(l>r)
    {
        return 1;
    }
    long long ret=0;
    for(int i=l+1;i<=r;i+=4)
    {
        for(int j=i+1;j<=r;j+=4)
        {
            for(int k=j+1;k<=r;k+=4)
            {
                long long tmp=1;
                if((pref[i-1]-pref[l])%2==0 && (pref[j-1]-pref[i])%2==0 && (pref[k-1]-pref[j])%2==0 && (pref[r-1]-pref[k])%2==0)
                {
                    tmp*=solve(l+1,i-1);
                    tmp%=MOD;
                    tmp*=solve(i+1,j-1);
                    tmp%=MOD;
                    tmp*=solve(j+1,k-1);
                    tmp%=MOD;
                    tmp*=solve(k+1,r-1);
                    tmp%=MOD;
                    if(a[l]!=a[i] && a[i]==a[j] && a[j]==a[k])
                    {
                        ret+=tmp;
                        ret%=MOD;
                    }
                    if(a[i]!=a[l] && a[l]==a[j] && a[j]==a[k])
                    {
                        ret+=tmp;
                        ret%=MOD;
                    }
                    if(a[j]!=a[i] && a[i]==a[l] && a[l]==a[k])
                    {
                        ret+=tmp;
                        ret%=MOD;
                    }
                    if(a[k]!=a[i] && a[i]==a[j] && a[j]==a[l])
                    {
                        ret+=tmp;
                        ret%=MOD;
                    }
                }
            }
        }
    }
    return ret;
}

int Zvezda(int N, int *A)
{
    for(int i=1;i<=N;i++)
    {
        a[i]=A[i];
        pref[i]=pref[i-1];
        if(A[i]==0)
        {
            pref[i]++;
        }
        else
        {
            pref[i]--;
        }
        for(int j=1;j<=N;j++)
        {
            mem[i][j]=-1;
        }
    }
    return solve(1,N);
}