#include <bits/stdc++.h>
#define il inline
const int N=1e5+5;

int n,m,x,ans,a[N],b[N]; bool p[N];
int to[N+N],nx[N+N],hd[N],sze;
std::unordered_map<int,int> o;

il void add(int u,int v){to[++sze]=v,nx[sze]=hd[u],hd[u]=sze;}

il void dfs(int u){p[u]=1; for (int i=hd[u],v; i; i=nx[i]) if (!p[v=to[i]]) dfs(v);}

int main()
{
	scanf("%d",&n); int i;
	for (i=1; i<=n; i++) scanf("%d",a+i),o[a[i]]++,x^=a[i];
	o[x]++; for (i=1; i<=n; i++) scanf("%d",b+i),o[b[i]]--;
	for (auto &j:o)
		if (j.second<0) return puts("-1"),0;
		else j.second=++m;
	for (i=1; i<=n; i++) if (a[i]!=b[i])
		add(o[a[i]],o[b[i]]),add(o[b[i]],o[a[i]]),ans++;
	
	for (i=1; i<=m; i++) if (!p[i]&&hd[i]) ans++,dfs(i);
	(hd[o[x]])&&(ans--),printf("%d",ans);
	
	return 0;
}