//------------------------------>> tsukasa_diary's template <<------------------------------//
#include <bits/stdc++.h>
using namespace std;
#define for_(i,a,b) for(int i=(a);i<(b);++i)
#define for_rev(i,a,b) for(int i=(a);i>=(b);--i)
#define allof(a) (a).begin(),(a).end()
#define minit(a,b) memset(a,b,sizeof(a))
using lint = long long;
using pii = pair< int, int >;
template< typename T > using Vec = vector< T >;
template< typename T > bool in_range(T x, T lb, T ub) { return lb <= x && x < ub; }
template< typename T > bool in_range(T x, T y, T lb, T ub) { return in_range(x, lb, ub) && in_range(y, lb, ub); }
template< typename T > void modAdd(T& a, T b, T mod) { a = (a + b + mod) % mod; }
template< typename T > void modMul(T& a, T b, T mod) { a = (a * b) % mod; }
template< typename T > void minUpdate(T& a, T b) { a = min(a, b); }
template< typename T > void maxUpdate(T& a, T b) { a = max(a, b); }
int bitCount(int x) { return __builtin_popcount(x); }
int bitCount(lint x) { return __builtin_popcountll(x); }
const int dx[4] = {0,1,0,-1}, dy[4] = {-1,0,1,0};
const int Dx[8] = {0,1,1,1,0,-1,-1,-1}, Dy[8] = {-1,-1,0,1,1,1,0,-1};
const double EPS = 1e-9;
const double PI = acos(-1);
//--------------8---------------->> coding space <<-----------------8-------------//
int N, a[100005];
int main() {
cin >> N;
for_(i,0,N) cin >> a[i];
int xor_sum = 0;
for_(i,0,N) xor_sum ^= a[i];
int ans = 0;
for_rev(b,30,1) {
if (xor_sum >> b & 1) {
int k = -1;
for_(i,0,N) {
if (a[i] == (1 << b)) {
k = i;
break;
}
}
if (k == -1) {
puts("-1");
return 0;
}
xor_sum ^= a[k];
a[k]--;
xor_sum ^= a[k];
++ans;
}
}
if (xor_sum == 1) {
bool flag = false;
for_(i,0,N) flag |= (a[i] & 1);
if (flag) {
++ans;
} else {
puts("-1");
return 0;
}
}
cout << ans << endl;
}
//--------------8---------------->> coding space <<-----------------8-------------//