/*********************************************************************\
   |--\        ---       /\        |-----------| -----   /-------|    |
   |   \        |       /  \       |               |    /             |
   |    \       |      /    \      |               |   |              |
   |     \      |     /      \     |               |   |----|         |
   |      \     |    / ------ \    |-------|       |        |-----|   |
   |       \    |   /          \   |               |              |   |
   |        \   |  /            \  |               |              /   |
  ---        -------            ------           ----- |---------/    |
                                                                      |
    codeforces = nfssdq  ||  topcoder = nafis007                      |
    mail = nafis_sadique@yahoo.com || nfssdq@gmail.com                |
    IIT,Jahangirnagar University(41)                                  |
                                                                      |
**********************************************************************/

#include <bits/stdc++.h>

using namespace std;

#define xx         first
#define yy         second
#define pb         push_back
#define mp         make_pair
#define LL         long long
#define inf        INT_MAX/3
#define mod        1000000007ll
#define PI         acos(-1.0)
#define linf       (1ll<<60)-1
#define FOR(I,A,B) for(int I = (A); I < (B); ++I)
#define REP(I,N)   FOR(I,0,N)
#define ALL(A)     ((A).begin(), (A).end())
#define set0(ar)   memset(ar,0,sizeof ar)
#define vsort(v)   sort(v.begin(),v.end())
#define setinf(ar) memset(ar,126,sizeof ar)

//cout << fixed << setprecision(20) << p << endl;

template <class T> inline T bigmod(T p,T e,T M){
    LL ret = 1;
    for(; e > 0; e >>= 1){
        if(e & 1) ret = (ret * p) % M;
        p = (p * p) % M;
    } return (T)ret;
}
template <class T> inline T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}
template <class T> inline T modinverse(T a,T M){return bigmod(a,M-2,M);}

LL ar[19][1<<19], ar1[1<<19], val[39], cc[19], ss[39];

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n; cin >> n;
    REP(i, n) cin >> val[i];
    REP(i, n) {
        ss[i] = val[i];
        if(i) ss[i] += ss[i-1];
    }
    if(n == 1){
        cout << 1 << endl;
        return 0;
    }
    int p = n / 2;
    REP(i, 1<<p){
        int xor_val = 0, sum = 0, last = 0;
        if(i % 2 == 0) continue;
        REP(j, p){
            if(i & 1<<j){
                xor_val ^= sum;
                sum = 0;
                last = j;
            }
            sum += val[j];
        }
        ar[last][cc[last]++] = xor_val;
    }
    REP(i, p) sort(ar[i], ar[i] + cc[i]);

    LL res = 0;
    int q = n - p;
    REP(i, 1<<q){
        int xor_val = 0, sum = 0, sum1 = 0, fl = 0;
        REP(j, q){
            if(i & 1<<j){
                if(fl == 0) sum1 = sum;
                else xor_val ^= sum;
                sum = 0; fl = 1;
            }
            sum += val[j+p];
        }
        if(fl == 0) sum1 = sum;
        else xor_val ^= sum;

        REP(j, p){
            LL sumt = sum1 + ss[p-1];
            if(j > 0) sumt -= ss[j-1];

            int tv = xor_val ^ sumt;
            LL cnt = upper_bound(ar[j], ar[j] + cc[j], tv) - lower_bound(ar[j], ar[j] + cc[j], tv);
//            cout << i << " " << j << " " << tv << " " << cnt << endl;

            res += cnt;
        }
    }

    cout << res << endl;

}