#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <map>
#include <set>

using namespace std;

typedef pair<int , int> P2;
typedef pair<pair<int , int> , int> P3;
typedef pair<pair<int , int> , pair<int , int> > P4;
#define Fst first
#define Snd second
#define PB(a) push_back(a)
#define MP(a , b) make_pair((a) , (b))
#define M3P(a , b , c) make_pair(make_pair((a) , (b)) , (c))
#define M4P(a , b , c , d) make_pair(make_pair((a) , (b)) , make_pair((c) , (d)))
#define repp(i,a,b) for(int i = (int)(a) ; i < (int)(b) ; ++i)
#define repm(i,a,b) for(int i = (int)(a) ; i > (int)(b) ; --i)
#define repv(t,it,v) for(vector<t>::iterator it = v.begin() ; it != v.end() ; ++it)

int N;
bool a[40];
bool b[40];
int s;

int main(){
	scanf("%d" , &N);
	repp(i,0,N){
		int x;
		scanf("%d" , &x);
		s ^= x;
		int z = 0;
		for(; x % 2 == 0 ; ++z) x >>= 1;
		b[z] = 1;
	}
	for(int i = 0 ; s > 0 ; ++i){
		a[i] = s % 2 == 1;
		s >>= 1;
	}
	int ans = 0;
	repm(i,33,-1){
		if(a[i+1] ^ a[i]){
			if(b[i]){
				++ans;
			} else {
				ans = -1000;
			}
		}
	}
	printf("%d\n" , ans < 0 ? -1 : ans);
	return 0;
}
