#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

vector< pair<long long, long long> > v;
vector< pair<long long, long long> > v2;
vector<long long> aux1,aux2;

int main(){
  ios::sync_with_stdio(0);

  int N;

  cin >> N;

  int a[N];

  for(int i = 0;i < N;++i)
    cin >> a[i];

  if(N == 1){
    cout << 1 << endl;
    return 0;
  }

  int N1 = N / 2,N2 = (N + 1) / 2;
  v.push_back(make_pair(0,a[0]));

  for(int i = 1;i < N1;++i){
    v2.clear();
    int m = v.size();

    for(int j = 0;j < m;++j){
      pair<long long,long long> cur = v[j];
      v2.push_back(make_pair(cur.first,cur.second + a[i]));
      v2.push_back(make_pair(cur.first ^ cur.second,a[i]));
    }

    v = v2;
  }

  /*for(int i = 0;i < (1 << (N1 - 1));++i){
    cout << v[i].first << " " << v[i].second << endl;
  }*/

  long long nways = 0;

  for(int suffix = 0;suffix <= N2;++suffix){
    //cout << "suffix = " << suffix << endl;
    long long sum = 0;

    for(int i = 0;i < suffix;++i)
      sum += a[N1 + i];

    aux1.clear();
    aux2.clear();

    for(int i = 0;i < v.size();++i)
      aux1.push_back(v[i].first ^ (v[i].second + sum));

    if(suffix == N2) aux2.push_back(0);
    else{
      for(int mask = 0;mask < (1 << (N2 - suffix - 1));++mask){
        long long result = 0;

        for(int i = 0,sum2 = 0;i < N2 - suffix;++i){
          sum2 += a[N1 + suffix + i];
          //cout << N1 + suffix + i << " " << result << " " << sum2 << endl;
          if(i == N2 - suffix - 1 || (mask >> i & 1)){
            result ^= sum2;
            sum2 = 0;
          }
        }
        //cout << "mask = " << mask << ", result = " <<result << endl;
        aux2.push_back(result);
      }
    }

    /*for(int i = 0;i < aux1.size();++i)
      cout << aux1[i] << " ";
    cout << endl;
    for(int i = 0;i < aux2.size();++i)
      cout << aux2[i] << " ";
    cout << endl;*/

    sort(aux1.begin(),aux1.end());
    sort(aux2.begin(),aux2.end());

    for(int p1 = 0,p2 = 0;p1 < aux1.size();){
      long long val = aux1[p1];
      int equal = 0;

      while(p2 < aux2.size() && aux2[p2] < val) ++p2;

      if(p2 < aux2.size() && aux2[p2] == val){
        int e = p2;
        while(e < aux2.size() && aux2[e] == val) ++e;
        equal = e - p2;
        p2 = e;
      }

      int e = p1;
      while(e < aux1.size() && aux1[e] == val) ++e;
      nways += (long long)(e - p1) * equal;
      p1 = e;
    }
  }

  cout << nways << endl;

  return 0;
}