#include <bits/stdc++.h>
using namespace std;
const int N = 1000002;
struct data {
  int t, l, r, val, pos;
};
int n, q;
vector<data> a;
long long bit[N], s[N], ans[N];
map<int, int> m;
bool cmp(const data &x, const data &y) {
  return ((x.r < y.r) || ((x.r == y.r && x.t < y.t) ||
                          (x.r == y.r && x.t == y.t && x.l < y.l)));
}
void update(int pos, int k) {
  while (pos <= n) {
    bit[pos] ^= k;
    pos += (pos & -pos);
  }
}
long long get(int pos) {
  long long res = 0;
  if (pos == 0) return 0LL;
  while (pos > 0) {
    res ^= bit[pos];
    pos -= (pos & -pos);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  ;
  cin.tie(0);
  scanf("%d", &n);
  s[0] = 0;
  memset(bit, 0, sizeof(bit));
  for (int i = (1); i <= (n); i++) {
    data x;
    scanf("%d", &x.val);
    x.t = 0;
    x.l = 0;
    x.r = i;
    a.push_back(x);
    s[i] = s[i - 1] ^ x.val;
    x.pos = 1e9;
  }
  scanf("%d", &q);
  for (int i = (1); i <= (q); i++) {
    data x;
    scanf("%d %d", &x.l, &x.r);
    x.t = 1;
    x.val = 0;
    x.pos = i;
    a.push_back(x);
  }
  sort(a.begin(), a.end(), cmp);
  for (int i = (0); i < (a.size()); i++) {
    data x = a[i];
    if (x.t) {
      long long cur = s[x.r] ^ s[x.l - 1];
      cur ^= (get(x.r) ^ get(x.l - 1));
      ans[x.pos] = cur;
    } else {
      if (m.count(x.val)) update(m[x.val], x.val);
      update(x.r, x.val);
      m[x.val] = x.r;
    }
  }
  for (int i = (1); i <= (q); i++) printf("%d\n", ans[i]);
}
