Problem:
Score : 1000 points

Problem Statement

There is a sequence of length N: a = (a_1, a_2, ..., a_N).
Here, each a_i is a non-negative integer.

Snuke can repeatedly perform the following operation:

Let the XOR of all the elements in a be x. Select an integer i (1 ≤ i ≤ N) and replace a_i with x.

Snuke's objective is to match a with another sequence b = (b_1, b_2, ..., b_N).
Here, each b_i is a non-negative integer.

Determine whether the objective is achievable, and find the minimum necessary number of operations if the answer is positive.

Constraints

2 ≤ N ≤ 10^5

a_i and b_i are integers.

0 ≤ a_i, b_i < 2^{30}

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N
b_1 b_2 ... b_N

Output

If the objective is achievable, print the minimum necessary number of operations.
Otherwise, print -1 instead.

Sample Input 1

3
0 1 2
3 1 0

Sample Output 1

2

At first, the XOR of all the elements of a is 3.
If we replace a_1 with 3, a becomes (3, 1, 2).

Now, the XOR of all the elements of a is 0.
If we replace a_3 with 0, a becomes (3, 1, 0), which matches b.

Sample Input 2

3
0 1 2
0 1 2

Sample Output 2

0

Sample Input 3

2
1 1
0 0

Sample Output 3

-1

Sample Input 4

4
0 1 2 3
1 0 3 2

Sample Output 4

5

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>
int cmp(const void*a,const void *b){
	return *(long long*)a-*(long long*)b;
}
long long a[100000],b[100000],c[100001],d[100001],p,q,ans,r;
int main(int argc, char const *argv[]){
	long n,i;
	scanf("%ld",&n);
	for(i=0;i<n;i++){
		scanf("%lld",&a[i]);
		c[i]=a[i];
		p=p^a[i];
	}
	c[i]=p;
	for(i=0;i<n;i++){
		scanf("%lld",&b[i]);
		d[i]=b[i];
		q=q^b[i];
	}
	d[i]=q;
	qsort(c,n+1,sizeof(long long),cmp);
	qsort(d,n+1,sizeof(long long),cmp);
	for(i=0;i<=n;i++){
		if(c[i]!=d[i]){
			printf("-1\n");
			return 0;
		}
	}
	for(i=0;i<n;i++){
		if(b[i]==p && b[i]!=a[i]){
			ans+=1;
			r++;
		}
		if(b[i]==a[i]) r++;
	}
	ans+=n-r+(p==q);
	printf("%lld\n",ans);
	return 0;
}