#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e6 + 7;
const int INF = (int)1e9 + 7;
const long long LINF = (long long)1e12 + 7;
const int MOD = (int)1e9 + 7;
void file() {}
inline int readChar();
template <class T = int>
inline T readInt();
template <class T>
inline void writeInt(T x, char end = 0);
inline void writeChar(int x);
inline void writeWord(const char *s);
static const int buf_size = 4096;
inline int getChar() {
  static char buf[buf_size];
  static int len = 0, pos = 0;
  if (pos == len) pos = 0, len = fread(buf, 1, buf_size, stdin);
  if (pos == len) return -1;
  return buf[pos++];
}
inline int readChar() {
  int c = getChar();
  while (c <= 32) c = getChar();
  return c;
}
template <class T>
inline T readInt() {
  int s = 1, c = readChar();
  T x = 0;
  if (c == '-') s = -1, c = getChar();
  while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getChar();
  return s == 1 ? x : -x;
}
static int write_pos = 0;
static char write_buf[buf_size];
inline void writeChar(int x) {
  if (write_pos == buf_size)
    fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
  write_buf[write_pos++] = x;
}
template <class T>
inline void writeInt(T x, char end) {
  if (x < 0) writeChar('-'), x = -x;
  char s[24];
  int n = 0;
  while (x || !n) s[n++] = '0' + x % 10, x /= 10;
  while (n--) writeChar(s[n]);
  if (end) writeChar(end);
}
inline void writeWord(const char *s) {
  while (*s) writeChar(*s++);
}
struct Flusher {
  ~Flusher() {
    if (write_pos) fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
  }
} flusher;
int P[MAXN], F[MAXN];
int get_xor(int l, int r) { return P[r + 1] ^ P[l]; }
void upd(int x, int v) {
  for (int px = x; px < MAXN; px |= (px + 1)) {
    F[px] ^= v;
  }
}
int get(int x) {
  int ans = 0;
  for (int px = x; px >= 0; px = (px & (px + 1)) - 1) {
    ans ^= F[px];
  }
  return ans;
}
int main() {
  file();
  int n;
  n = readInt();
  vector<int> A(n);
  for (int i = 0; i < int(n); ++i) {
    A[i] = readInt();
    P[i + 1] = P[i] ^ A[i];
  }
  int m, l, r;
  m = readInt();
  vector<int> ANS(m);
  vector<vector<pair<int, int> > > M(n);
  for (int i = 0; i < int(m); ++i) {
    l = readInt();
    r = readInt();
    --l, --r;
    M[r].push_back({l, i});
  }
  map<int, int> S;
  for (int i = 0; i < int(n); ++i) {
    upd(i, A[i]);
    if (S.find(A[i]) != S.end()) {
      upd(S[A[i]], A[i]);
    }
    S[A[i]] = i;
    for (auto l : M[i]) {
      ANS[l.second] = get_xor(l.first, i) ^ get(i) ^ get(l.first - 1);
    }
  }
  for (int i = 0; i < int(m); ++i) {
    writeInt(ANS[i], '\n');
  }
  return 0;
}
