#include using namespace std; long long inversion_number(vector &p){ int N = p.size(); long long ans = 0; vector bit(N + 1, 0); for (int i = 0; i < N; i++){ ans += i; int j = p[i]; while (j > 0){ ans -= bit[j]; j -= j & -j; } j = p[i]; while (j <= N){ bit[j]++; j += j & -j; } } return ans; } int main(){ int N; cin >> N; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector B(N); for (int i = 0; i < N; i++){ cin >> B[i]; } if (A[0] != B[0] || A[N - 1] != B[N - 1]){ cout << -1 << endl; } else { vector C(N - 1); for (int i = 0; i < N - 1; i++){ C[i] = A[i] ^ A[i + 1]; } vector D(N - 1); for (int i = 0; i < N - 1; i++){ D[i] = B[i] ^ B[i + 1]; } vector C2 = C; sort(C2.begin(), C2.end()); vector D2 = D; sort(D2.begin(), D2.end()); if (C2 != D2){ cout << -1 << endl; } else { map mp; vector> E(N - 1); for (int i = 0; i < N - 1; i++){ E[i] = make_pair(C[i], mp[C[i]]); mp[C[i]]++; } map mp2; vector> F(N - 1); for (int i = 0; i < N - 1; i++){ F[i] = make_pair(D[i], mp2[D[i]]); mp2[D[i]]++; } map, int> mp3; for (int i = 0; i < N - 1; i++){ mp3[E[i]] = i; } vector G(N - 1); for (int i = 0; i < N - 1; i++){ G[i] = mp3[F[i]] + 1; } cout << inversion_number(G) << endl; } } }