#include <iostream>
#include <vector>
using namespace std;

const int MOD = 1000000007;
vector<int> bele;
vector<int> crne;
vector<int>fja;
//vector<vector<int>> br_nac= vector<vector<int>>(500,<vector<int>>(500,-1));
vector<int> bele_parc;
vector<int> crne_parc;

int dist(int a, int b,int n)
{
    return (b-a+n-1)%n;
}

int dist_bele(int i,int j,int nb,int n)
{
    return (bele_parc[j]-bele_parc[(i+n-1)%n]+nb)%nb;
}

int dist_crne(int i,int j,int nc,int n)
{
    return (crne_parc[j]-crne_parc[(i+n-1)%n]+nc)%nc;
}



long long popuni(int i, int j,int n)
{
    long long pop;
    if(dist(i,j,n)%4!=0)
        return 0;
    int nc = dist_crne(i,j,nc,n);
    int nb = dist_bele(i,j,nb,n);

    if(nc%2 != n/4)
    {
       //br_nac[i][j]=0;
        return 0;
    }
//    int zb = (nc-d)/2;
//    int zc = d-zb;

   // br_nac[i][j]=pop;
}

bool valid(int i1, int i2, int i3, int i4, int *A,int n)
{
    int crni = 0;
    if(A[i1%n]==0)
        crni++;
    if(A[i2%n]==0)
        crni++;
    if(A[i3%n]==0)
        crni++;
    if(A[i4%n]==0)
        crni++;
    return (crni%2 == 1);
}


int Zvezda(int N, int *A)
{
    fja = vector<int>(N,0);
    int n = N;
    int nc=0, nb=0;
    int d = N/4;
    for(int i=0; i<N; i++)
    {
        bele_parc.push_back(nb);
        crne_parc.push_back(nc);
        if(A[i]==0)
        {

            nb++;
            bele.push_back(i);
        }
        else
        {

            nc++;
            crne.push_back(i);

        }
    }
    for(int i=0; i<n; i++)
    {
        bele_parc.push_back(bele_parc[i]+nb);
        crne_parc.push_back(crne_parc[i]+nc);
    }


    if((nc-d)%2!=0 || nc==0 || nc == n)
        return 0;
    int zb = (nc-d)/2;
    int zc = d-zb;
    if(n==4)
        return 1;
    bool moze[N];
//    for(int i=0; i<n;i++)
//        cout << moze[i] << ' ';
   // cout << endl;
    for(int i=0; i<n; i++)
    {
        if((bele_parc[i+4]-bele_parc[i]) %2 == 1)
            moze[i]=true;
        else
            moze[i]=false;
    }
   int br_nac=0;
   //cout << nc << ' ' << nb << endl;
    if(n==8)
    {
        for(int i=0; i<n/2; i++)
        {
            if(moze[i]&&moze[(i+4)%n])
                br_nac++;
        }
        return br_nac;

    }
    if(n==12)
    {
        for(int i=0; i<4; i++)
        {
            if(moze[i]&&moze[(i+4)%n]&&moze[(i+8)%n])
                br_nac++;
        }
        for(int i=0; i<n; i++)
        {
            if(moze[i]&&moze[(i+5)%n]&&valid(i+4, i+9, i+10,i+11,A,n))
                br_nac++;
        }
        for(int i=0; i<n/2;i++)
        {
            if(moze[i]&&moze[(i+6)%n]&&valid(i+4,i+5,i+10,i+11,A,n))
                br_nac++;
        }
        return br_nac;
    }
    return 0;
//    if(n==8)
//    {
//        if(nb==2)
//        {
//            int i = bele.front();
//            int j = bele.back();
//            return min(abs(i-j),abs(n-i+j));
//        }
//        if(nc==2)
//        {
//            int i = crne.front();
//            int j = crne.back();
//            return min(abs(i-j),abs(n-i+j));
//        }
//        else
//        {
//
//        }
//    }



    //if(nc==zc || nb==zb)
    //    return 1;


}

//int main()
//{
//    int n;
//    int a[50];
//    cin >> n;
//    for(int i=0; i<n; i++)
//        cin >> a[i];
//    cout << Zvezda(n,a);
//    return 0;
//}