#include<bits/stdc++.h>
#define maxn 1000005
using namespace std;
int n,a[maxn],b[maxn],ta[maxn],tb[maxn],vis[maxn];
map<int,int> Ha; int tot=0;
int fa[maxn];
int getf(int x){return fa[x]==x?x:fa[x]=getf(fa[x]);}
int Merge(int x,int y)
{
	int fx=getf(x),fy=getf(y);
	if(fx!=fy) fa[fx]=fy;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n+1;ta[i]=a[i],i++)
	{
		if(i!=n+1) scanf("%d",&a[i]),a[n+1]^=a[i];
		if(!Ha[a[i]]) Ha[a[i]]=++tot;
	}
	for(int i=1;i<=n+1;tb[i]=b[i],i++)
	{
		if(i!=n+1)scanf("%d",&b[i]),b[n+1]^=b[i];
		if(!Ha[b[i]]) Ha[b[i]]=++tot;
	}
	n++;
	sort(ta+1,ta+n+1),sort(tb+1,tb+n+1);
	for(int i=1;i<=n;i++)
		if(ta[i]!=tb[i]) return (puts("-1"),0);
	for(int i=1;i<=2*n+tot;i++) fa[i]=i;
	for(int i=1;i<=n;i++)
	{
		if(a[i]==b[i]&&i!=n) continue;
		Merge(i,i+n),Merge(i,2*n+Ha[a[i]]),Merge(i+n,2*n+Ha[b[i]]);
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]==b[i]&&i!=n) continue;
		if(i!=n) ans++;
		ans+=!(vis[getf(i)]),vis[getf(i)]=1;
		ans+=!(vis[getf(i+n)]),vis[getf(i+n)]=1;
	}
	printf("%d\n",ans-1);
	return 0;
}