#include <bits/stdc++.h>
using namespace std;
void _r(const int& x) { scanf("%d", &x); }
void _r(const long long& x) { scanf("%I64d", &x); }
void _r(const char* x) { scanf("%s", x); }
void R() {}
template <class T, class... U>
void R(const T& head, const U&... tail) {
  _r(head);
  R(tail...);
}
void _w(const char x) { putchar(x); }
void _w(const char* x) { printf("%s", x); }
void _w(const int x) { printf("%d", x); }
void _w(const long long x) { printf("%I64d", x); }
void _w(const double x) { printf("%.6f", x); }
void W() {}
template <class T, class... U>
void W(const T& head, const U&... tail) {
  _w(head);
  putchar(sizeof...(tail) ? ' ' : '\n');
  W(tail...);
}
const long long mod = 1e9 + 7;
long long fp1(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans *= a;
    b >>= 1;
    a *= a;
  }
  return ans;
}
long long fp2(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    b >>= 1;
    a = a * a % mod;
  }
  return ans;
}
long long Read() {
  long long res = 0, flag = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') flag = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    res = res * 10 + ch - '0';
    ch = getchar();
  }
  return res * flag;
}
const int N = 4e5 + 5;
int bit[32][N];
int ans[32];
int a[N];
int main() {
  int n;
  R(n);
  for (int i = (1); i <= (n); i++) R(a[i]);
  for (int i = (1); i <= (31); i++) {
    long long mod = 1LL << i;
    for (int j = (1); j <= (n); j++) bit[i][j] = a[j] % mod;
  }
  for (int i = (1); i <= (31); i++) {
    sort(bit[i] + 1, bit[i] + n + 1);
    int mn = (1 << (i - 1));
    int mx = (1 << i) - 1;
    int st1, ed1, st2, ed2;
    for (int j = (1); j <= (n); j++) {
      a[j] = bit[i][j];
      if (mn - a[j] > bit[i][n])
        st1 = n + 1;
      else
        st1 = lower_bound(bit[i] + 1, bit[i] + n + 1, mn - a[j]) - bit[i];
      if (mx - a[j] >= bit[i][n])
        ed1 = n + 1;
      else
        ed1 = upper_bound(bit[i] + 1, bit[i] + n + 1, mx - a[j]) - bit[i];
      ed1--;
      if (mn - a[j] + mx + 1 > bit[i][n])
        st2 = n + 1;
      else
        st2 = lower_bound(bit[i] + 1, bit[i] + n + 1, mn - a[j] + mx + 1) -
              bit[i];
      if (mx - a[j] + mx + 1 >= bit[i][n])
        ed2 = n + 1;
      else
        ed2 = upper_bound(bit[i] + 1, bit[i] + n + 1, mx - a[j] + mx + 1) -
              bit[i];
      ed2--;
      ans[i] += max(0, ed1 - st1 + 1) + max(0, ed2 - st2 + 1);
      if (bit[i - 1][j] * 2 >= mn) ans[i]--;
    }
  }
  for (int i = (1); i <= (31); i++) ans[i] >>= 1;
  int res = 0;
  for (int i = (1); i <= (31); i++) {
    if (ans[i] & 1) res += 1 << (i - 1);
  }
  W(res);
  return 0;
}
