#include<bits/stdc++.h>
#define ll long long
#define M 1000000007

using namespace std;

int a[510];
bool mark[510];
int N1;
int oduzmi;
ll sol;
int grane[100];
int grane2[100];
int prethodne[10000][100];
int index=0;
int duzg;

void proveri()
{
    bool razl=false;
    for(int i=0;i<duzg;i++)
        grane2[i]=grane[i];
    sort(grane2,grane2+duzg);
    //for(int i=0;i<duzg;i++)
    //    cout<<grane2[i]<<" ";
    //cout<<endl;
    for(int i=0;i<index;i++)
    {
        razl=false;
        for(int j=0;j<duzg && !razl;j++)
            if(grane2[j]!=prethodne[i][j])
                razl=true;
        if(!razl)
            return;
    }
    for(int i=0;i<duzg;i++)
        prethodne[index][i]=grane2[i];
    index++;
}

bool moze(int i, int j, int k, int l)
{
    if(i<0)i+=N1;
    if(j<0)j+=N1;
    if(k<0)k+=N1;
    if(l<0)l+=N1;
    i=(i-1)%N1+1;
    j=(j-1)%N1+1;
    k=(k-1)%N1+1;
    l=(l-1)%N1+1;
    //cout<<i<<" "<<j<<" "<<k<<" "<<l<<endl;
    return((a[i]^a[j]^a[k]^a[l])==1);
}

void resi(int poc, int kraj, int n, int korak)
{
    if(kraj<=0) kraj+=N1;
    if(kraj>N1) kraj-=N1;

    if(poc<=0) poc+=N1;
    if(poc>N1) poc-=N1;
    //cout<<poc<<" "<<kraj<<" "<<n<<endl;
    if(n==4)
    {
        grane[korak]=poc;
        if(moze(poc,poc+1,poc+2,poc+3))
            proveri();

        return;
    }

    ll ret=0;
    //cout<<poc<<endl;
    if(moze(poc,poc+1,poc+2,poc+3))
        grane[korak]=poc, resi(poc+4, kraj, n-4, korak+1);
    if(moze(kraj,poc,poc+1,poc+2))
        grane[korak]=poc, resi(poc+3, kraj-1, n-4, korak+1);
    if(moze(kraj-1,kraj,poc,poc+1))
        grane[korak]=poc, resi(poc+2, kraj-2, n-4, korak+1);
    if(moze(kraj-2,kraj-1,kraj,poc))
        grane[korak]=poc, resi(poc+1, kraj-3, n-4, korak+1);
    return;
}

int Zvezda(int N, int* A) {

    N1=N;
    duzg=N/4;
    for(int i=1;i<=N;i++)
        a[i]=A[i];

    sol=0;
    for(int i=1;i<=N;i++)
    {
        oduzmi=0;
        if(moze(i,i+1,i+2,i+3))
            grane[0]=i, resi(i+4, i-1 , N-4, 1);
    }
	return index;
}