#include <iostream>
#include <cstdlib>
#include <map>
#include <vector>
#include <set>
#include <unordered_map>
#include <cstring>
using namespace std;
typedef vector<int> vi;
typedef long long ll;
typedef pair<int, ll> T;


int n, a[40];
ll sum[40][40];
int xorr[40][40];
map<T, ll> memo;

// How many ways from [i..n-1] can we play to xor to goal?
ll f(int i, ll goal) {
  //printf("f(%d,%lld)\n", i, goal);
  if (memo.count(T(i,goal))) return memo[T(i,goal)];

  ll ans = 0;
  if (sum[i][n-1] == goal) ans++;

  for (int k = i+1; k < n; k++) {
    //cout << " -- " << k << ": " << sum[i][k-1] << endl;
    ans += f(k, goal^sum[i][k-1]);
  }
  //printf("f(%d,%lld)=%lld\n", i, goal, ans);
  memo[T(i,goal)] = ans;
  return ans;
}

int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];

  for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
      ll tmp = 0;
      for (int k = i; k <= j; k++) tmp += a[k];
      sum[i][j] = tmp;
      //printf("sum[%d][%d] = %lld\n", i,j,sum[i][j]);

      int tmp2 = 0;
      //printf("(%d,%d)\n", i, j);
      for (int k = i; k <= j; k++) {
        //cout << k << " " << a[k] << endl;
        tmp2 = (tmp2^a[k]);
      }
      xorr[i][j] = tmp2;

      //printf("xorr[%d][%d] = %d\n", i,j,xorr[i][j]);
      //printf("\n");
    }
  }

  ll ans = f(0, 0);
  cout << ans << endl;

  //cout << xorr[1][n-1] << endl;
  //cout << (1^2) << endl;
  
  return 0;
}