#include <bits/stdc++.h>
using namespace std;
map<long long, int> ind;
struct node {
  int l, r, p;
} s[1000001];
bool cmp(node n, node m) {
  if (n.r != m.r) return n.r < m.r;
  return n.l < m.l;
};
int last[1000001];
long long tree[1000011];
int n;
void upd(int ind, long long x) {
  int i = ind;
  while (i <= n) {
    tree[i] ^= x;
    i += (i & -i);
  }
};
long long get(int i) {
  long long ans = 0;
  while (i > 0) {
    ans ^= tree[i];
    i -= (i & -i);
  }
  return ans;
};
long long a[1000001], u[1000001];
long long x[1000001];
int main() {
  int i, ct = 0, q;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    ind[a[i]] = i;
  }
  for (i = 1; i <= n; i++) x[i] = x[i - 1] ^ a[i];
  scanf("%d", &q);
  for (i = 0; i < q; i++) {
    scanf("%d%d", &s[i].l, &s[i].r);
    s[i].p = i;
  }
  sort(s, s + q, cmp);
  int cur = 1;
  long long ans = 0;
  for (i = 0; i < q; i++) {
    while (cur <= s[i].r && cur <= n) {
      if (last[ind[a[cur]]] == 0) {
        upd(cur, a[cur]);
        last[ind[a[cur]]] = cur;
      } else {
        upd(last[ind[a[cur]]], a[cur]);
        upd(cur, a[cur]);
        last[ind[a[cur]]] = cur;
      }
      cur++;
    }
    u[s[i].p] = x[s[i].r] ^ x[s[i].l - 1] ^ get(n) ^ get(s[i].l - 1);
  }
  for (i = 0; i < q; i++) printf("%lld\n", u[i]);
  return 0;
}
