#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cstring>
#include <iomanip>
#include <map>

using namespace std;


int a[40],b[40];

map<int,long long> m00[40],m01[40],m10[40],m11[40];

int suff[40],pre[40];

void solve(int n) {
    for(int i = 0;i < n/2;i++) {
        cin>>a[i];
    }
    int n2 = 0;
    for(int j = n/2;j < n;j++) {
        cin>>b[j - n/2];
        n2++;
    }
    n = n/2;
    for(int i = 1;i <= n;i++) {
        suff[i] = suff[i - 1] + a[n - i];
    }
    for(int i = 1;i <= n2;i++) {
        pre[i] = pre[i - 1] + b[i - 1];
    }
    for(int m = 0;m < (1<<n);m++) {
        int x = 0;
        int c = a[0];
        for(int i = 1;i < n;i++) {
            if(((m>>i) & 1) != ((m>>(i - 1)) & 1) ) {
                x = x ^ c;
                c = a[i];
            }
            else {
                c+=a[i];
            }
        }
        x = x ^ c;
        int cnt = 0;
        for(int i = n - 1;i >= 0;i--,cnt++) {
            if(((m>>i) & 1) != ((m>>(n - 1)) & 1)) break;
        }
        if((m>>(n - 1)) == 0) m00[cnt][x]++;
        else m01[cnt][x]++;
    }
    for(int m = 0;m < (1<<n2);m++) {
        int x = 0;
        int c = b[0];
        for(int i = 1;i < n2;i++) {
            if(((m>>i) & 1) != ((m>>(i - 1)) & 1) ) {
                x = x ^ c;
                c = b[i];
            }
            else {
                c+=b[i];
            }
        }
        x = x ^ c;
        int cnt = 0;
        for(int i = 0;i < n2;i++,cnt++) {
            if(((m>>i) & 1) != (m & 1)) break;
        }
        if((m & 1) == 0) m10[cnt][x]++;
        else m11[cnt][x]++;
    }
    long long ans = 0;
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= n2;j++) {
            for(map<int,long long>::iterator it = m00[i].begin();it != m00[i].end();it++) {
                ans+=it->second * m10[j][it->first ^ suff[i] ^ pre[j] ^ (pre[j] + suff[i])];
            }
            for(map<int,long long>::iterator it = m01[i].begin();it != m01[i].end();it++) {
                ans+=it->second * m11[j][it->first ^ suff[i] ^ pre[j] ^ (pre[j] + suff[i])];
            }
            for(map<int,long long>::iterator it = m00[i].begin();it != m00[i].end();it++) {
                ans+=it->second * m11[j][it->first];
            }
            for(map<int,long long>::iterator it = m01[i].begin();it != m01[i].end();it++) {
                ans+=it->second * m10[j][it->first];
            }
        }
    }
    cout<<ans/2<<endl;
}

int main() {
    int n; cin>>n;
    if(n > 1) {
        solve(n);
        return 0;
    }
    for(int i = 0;i < n;i++) {
        cin>>a[i];
    }
    int ans = 0;
    for(int m = 0;m < (1<<n);m++) {
        int x = 0;
        int c = a[0];
        for(int i = 1;i < n;i++) {
            if(((m>>i) & 1) != ((m>>(i - 1)) & 1) ) {
                x = x ^ c;
                c = a[i];
            }
            else {
                c+=a[i];
            }
        }
        x = x ^ c;
        if(!x) ans++;
    }
    cout<<ans/2<<endl;
}