#include <bits/stdc++.h>
using namespace std;
struct linearBasis {
  static const int MAXL = 60;
  long long a[MAXL + 1];
  int id[MAXL + 1];
  int zero;
  linearBasis() {
    zero = 0;
    fill(a, a + MAXL + 1, 0);
  }
  long long& operator[](int k) { return a[k]; }
  bool insert(long long x) {
    for (int j = MAXL; ~j; j--) {
      if (!(x & (1LL << j))) {
        continue;
      }
      if (a[j]) {
        x ^= a[j];
      } else {
        for (int k = 0; k < j; k++) {
          if (x & (1LL << k)) {
            x ^= a[k];
          }
        }
        for (int k = j + 1; k <= MAXL; k++) {
          if (a[k] & (1LL << j)) {
            a[k] ^= x;
          }
        }
        a[j] = x;
        return true;
      }
    }
    zero = 1;
    return false;
  }
  long long query_max() {
    long long res = 0;
    for (int i = MAXL; ~i; i--) {
      res ^= a[i];
    }
    return res;
  }
  long long query_min() {
    for (int i = 0; i < MAXL; i++) {
      if (a[i]) {
        return a[i];
      }
    }
    return -1;
  }
  int count(long long x) {
    int res = 0;
    vector<long long> b(MAXL + 1);
    for (int i = 0; i <= MAXL; i++) {
      b[i] = a[i];
    }
    res = this->insert(x);
    for (int i = 0; i <= MAXL; i++) {
      a[i] = b[i];
    }
    return !res;
  }
  int size() {
    int res = 0;
    for (int i = 0; i <= MAXL; i++) {
      if (a[i]) {
        res++;
      }
    }
    return res;
  }
  long long kth_element(long long k) {
    vector<long long> b;
    for (int i = 0; i <= MAXL; i++) {
      if (a[i]) {
        b.push_back(a[i]);
      }
    }
    if (zero) {
      if (--k == 0) {
        return 0;
      }
    }
    if (k >= (1LL << this->size())) {
      return -1;
    }
    long long res = 0;
    for (int i = 0; i <= MAXL; i++) {
      if (k & (1LL << i)) {
        res ^= b[i];
      }
    }
    return res;
  }
  long long rank(long long x) {
    vector<long long> b;
    for (int i = 0; i <= MAXL; i++) {
      if (a[i]) {
        b.push_back(1LL << i);
      }
    }
    long long res = 0;
    for (int i = 0; i < (int)b.size(); i++) {
      if (x & b[i]) {
        res |= (1LL << i);
      }
    }
    return res;
  }
  void clear() {
    zero = 0;
    fill(a, a + MAXL + 1, 0);
  }
};
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n;
  cin >> n;
  long long sum = 0;
  linearBasis lb;
  int res = 0;
  for (int i = 0; i < n; i++) {
    long long x;
    cin >> x;
    sum ^= x;
    if (lb.insert(sum)) {
      res++;
    }
  }
  cout << (sum ? res : -1);
  return 0;
}
