#include <iostream> #include <map> using namespace std; int n, input[42], lB, rB, ans; map < int, int > l[42], r[42]; void getL () { for ( int i = 1 ; i <= n ; i ++ ) { int cSum = input[i]; for ( int s = i-1 ; s >= 0 ; s -- ) { for ( map < int , int > :: iterator it = l[s].begin() ; it != l[s].end() ; it ++ ) { l[i][ (it->first) ^ cSum ] += ( it->second ) ; } cSum += input[s]; } } } void getR () { for ( int i = n ; i >= rB ; i -- ) { int cSum = input[i]; for ( int s = i+1 ; s <= n+1 ; s ++ ) { for ( map < int , int > :: iterator it = r[s].begin() ; it != r[s].end() ; it ++ ) { r[i][ (it->first) ^ cSum ] += ( it->second ) ; } cSum += input[s]; } } } int main () { cin >> n; for ( int i = 1 ; i <= n ; i ++ ) { cin >> input[i]; } lB = n/2; rB = lB+1; l[0][0] = 1; r[n+1][0] = 1; getL(); getR(); // for ( map< int, int >::iterator it = l[n].begin(); it != l[n].end() ;it++ ) { // cout << (it->first) << " -> " << (it->second) << "\n"; // } cout << l[n][0] << "\n"; /* for ( int l1 = 1 ; l1 <= lB ; l1 ++ ) { for ( int r1 = n ; r1 >= l1 ; r1 -- ) { /// asdsad int cSum = 0; for ( int i = l1 ; i <= r1 ; i ++ ) { cSum += input[i]; } for ( map< int, int >::iterator it = l[l1-1].begin(); it != l[l1-1].end() ;it++ ) { ans += (it->second)*r[r1+1][ (it->first)^cSum ]; } } } cout << ans << "\n"; */ return 0; }