#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
const int mod = 1e9 + 7;
int add(int a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
int sub(int a, int b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
int mul(int a, int b) { return 1ll * a * b % mod; }
struct MySet {
  int cnt;
  int Linear_Sum;
  int Square_Sum;
  MySet(int a = 0, int b = 0, int c = 0) {
    cnt = a;
    Linear_Sum = b;
    Square_Sum = c;
  }
} Combi[N];
MySet operator+(const MySet &a, const MySet &b) {
  int x = add(mul(a.Square_Sum, b.cnt), mul(b.Square_Sum, a.cnt));
  x = add(x, mul(a.Linear_Sum, b.Linear_Sum));
  x = add(x, mul(a.Linear_Sum, b.Linear_Sum));
  int y = add(mul(a.Linear_Sum, b.cnt), mul(b.Linear_Sum, a.cnt));
  int z = mul(a.cnt, b.cnt);
  return MySet(z, y, x);
}
MySet operator-(const MySet &a, const MySet &b) {
  int x = a.cnt - b.cnt;
  int y = sub(a.Linear_Sum, b.Linear_Sum);
  int z = sub(a.Square_Sum, b.Square_Sum);
  return MySet(x, y, z);
}
void operator+=(MySet &a, const MySet &b) { a = a + b; }
void operator-=(MySet &a, const MySet &b) { a = a - b; }
int Powd[6];
int Pow2[N];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  Powd[0] = 1;
  Pow2[0] = 1;
  for (int i = 1; i < 6; ++i) Powd[i] = Powd[i - 1] * 10;
  for (int i = 1; i < N; ++i) Pow2[i] = Pow2[i - 1] * 2 % mod;
  for (int i = 1; i < N; ++i) Combi[i] = MySet(1, 0, 0);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    int x;
    cin >> x;
    Combi[x] += MySet(2, x, mul(x, x));
  }
  for (int d = 0; d < 6; ++d)
    for (int i = N - 1; i; --i)
      if ((i / Powd[d]) % 10) Combi[i - Powd[d]] += Combi[i];
  for (int d = 0; d < 6; ++d)
    for (int i = 1; i < N; ++i)
      if ((i / Powd[d]) % 10) Combi[i - Powd[d]] -= Combi[i];
  long long ans = 0;
  for (int i = 1; i < N; ++i) ans ^= 1ll * Combi[i].Square_Sum * i;
  cout << ans << endl;
}
