#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
#include<cstring>
using namespace std;
const int maxn=128;
int n;
ll dp[maxn+10][maxn+10],mod=1e9+7,rez;
bool a[maxn+10];
ll go(int l,int r){

    ///printf("%d %d\n",l,r);

    if(l>r)return 1;
    if(r-l+1<4){
        dp[l][r]=0;
        return 0;
    }
    if((r-l+1)%4!=0){
        dp[l][r]=0;
        return 0;
    }
    ///printf("%d %d  ehhehe\n",l,r);

    if(dp[l][r]!=-1)return dp[l][r];

    dp[l][r]=0;

    /// r-ti je koren
    for(int i=r-1;i>=l;i-=4){/// prvi list
        if(a[i]==a[r])continue;

        for(int j=i-1;j>=l;j-=4){/// drugi list
            if(a[j]==a[r])continue;

            for(int k=j-1;k>=l;k-=4){/// treci list
                if(a[k]==a[r])continue;
                if(k-l>=l && (k-l)%4)continue;

                ll pom1=go(l,k-1);
                if(pom1==0)continue;

                ll pom2=go(k+1,j-1);
                if(pom2==0)continue;

                ll pom3=go(j+1,i-1);
                if(pom3==0)continue;

                ll pom4=go(i+1,r-1);
                if(pom4==0)continue;

                dp[l][r]=(dp[l][r]+(((((pom1*pom2)%mod)*pom3)%mod)*pom4)%mod )%mod;
            }
        }
    }


    /// r-ti je list
    for(int i=r-1;i>=l;i--){/// koren
        if(a[i]==a[r])continue;

        ///if((r-i-1)%4)continue;

        for(int j=r-1;j>=l;j--){/// drugi list
            if(a[j]!=a[r])continue;
            if(j==i)continue;

            for(int k=j-1;k>=l;k--){/// treci list
                if(a[k]!=a[r])continue;
                if(k==i)continue;

                int stek[3];
                stek[0]=min(i,min(j,k));
                stek[2]=max(i,max(j,k));
                if(i!=stek[0] && i!=stek[2])stek[1]=i;
                else if(j!=stek[0] && j!=stek[2])stek[1]=j;
                else if(k!=stek[0] && k!=stek[2])stek[1]=k;


                ll pom1=go(l,stek[0]-1);
                if(pom1==0)continue;

                ll pom2=go(stek[0]+1,stek[1]-1);
                if(pom2==0)continue;

                ll pom3=go(stek[1]+1,stek[2]-1);
                if(pom3==0)continue;

                ll pom4=go(stek[2]+1,r-1);
                if(pom4==0)continue;

                ll pom=(((((pom1*pom2)%mod)*pom3)%mod)*pom4)%mod;

                dp[l][r]=(dp[l][r]+pom)%mod;

            }
        }
    }

    ///cout<<l<<" "<<r<<" "<<dp[l][r]<<"    izaso"<<endl;

    return dp[l][r];
}
ll dodo(){

   memset(dp,-1,sizeof(dp));

   return go(1,n)%mod;
}
int Zvezda(int N, int* A) {

	n=N;
    for(int i=1;i<=n;i++)
        a[i]=A[i];

	rez+=dodo();

return rez;
}