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

long long dp[MAX_N][MAX_N];
int* A;
void dpstep(int i, int j, int* col){
    for(int pt1=i+1; pt1<j; ++pt1){
        if(A[pt1]!=col[0])continue;
        for(int pt2=pt1+1; pt2<j; ++pt2){
            if(A[pt2]!=col[1])continue;
            for(int pt3=pt2+1; pt3<j; ++pt3){
                if(A[pt3]!=col[2])continue;
                long long dop=dp[i+1][pt1]*dp[pt1+1][pt2];
                dop%=MOD;
                dop*=dp[pt2+1][pt3];
                dop%=MOD;
                dop*=dp[pt3+1][j];
                dop%=MOD;
                dp[i][j]+=dop;
                dp[i][j]%=MOD;
            }
        }
    }
}

void calc(int i, int j){
    if(A[i]==0){
        //imamo dva slucaja, 0001 i 0111
        //0111
        int col1[3]={1, 1, 1};
        dpstep(i, j, col1);
        int col2[3]={0, 0, 1};
        dpstep(i, j, col2);
        int col3[3]={0, 1, 0};
        dpstep(i, j, col3);
        int col4[3]={1, 0, 0};
        dpstep(i, j, col4);
    }
    else{
        //imamo dva slucaja, 0001 i 0111
        //0111
        int col1[3]={0, 0, 0};
        dpstep(i, j, col1);
        int col2[3]={0, 1, 1};
        dpstep(i, j, col2);
        int col3[3]={1, 1, 0};
        dpstep(i, j, col3);
        int col4[3]={1, 0, 1};
        dpstep(i, j, col4);
    }
}

int Zvezda(int N, int* a) {
    A=a+1;
	for(int i=0; i<=N; ++i)dp[i][i]=1;
	for(int l=0; l<=N; ++l)
        for(int i=0; i<=N-l; ++i){
            calc(i, i+l);
            //if(dp[i][i+l])printf("dp[%d][%d]=%d\n", i, i+l, dp[i][i+l]);
        }
	return dp[0][N];
}