#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <assert.h>
#include <fstream>
#include <time.h>
#include <map>

using namespace std;

const int MAXN = 100005;

int n,ans,id;
int a[MAXN];
int b[MAXN];
int fa[MAXN];

map<int,int> cnt;
map<int,int> match;

int getroot(int p)
{
	return p == fa[p] ? p : fa[p] = getroot(fa[p]);
}
int main()
{
	std::ios::sync_with_stdio(0);
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> a[i];
		a[n + 1] ^= a[i];
	}
	for (int i = 1;i <= n;i++)
	{
		cin >> b[i];
		b[n + 1] ^= b[i];
	}
	for (int i = 1;i <= n + 1;i++)
		if (a[i] != b[i] || i == n + 1)
		{
			cnt[a[i]]++;
			cnt[b[i]]--;
			ans += (i <= n);
		}
	for (map<int,int>::iterator i = cnt.begin();i != cnt.end();i++)
	{
		match[i->first] = ++id;
		if (i->second)
		{
			cout << -1 << endl;
			return 0;
		}
		ans++;
	}
	for (int i = 1;i <= n;i++)
	{
		fa[i] = i;
		a[i] = match[a[i]];
		b[i] = match[b[i]];
	}
	for (int i = 1;i <= n;i++)
		if (a[i] != b[i] && getroot(a[i]) != getroot(b[i]))
		{
			ans--;
			fa[getroot(a[i])] = getroot(b[i]);
		}
	cout << ans - 1 << endl;
	return 0;
}