#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
const int mod = 1e9 + 7;
inline int read() {
  register int p = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    p = p * 10 + ch - '0';
    ch = getchar();
  }
  return p * f;
}
int lim;
namespace FWT {
void main(int *a, int typ) {
  for (int len = 1; len < lim; len *= 10) {
    if (typ == 1) {
      for (int i = lim - 1; i >= 0; i--)
        if ((i / len) % 10) a[i - len] += a[i], a[i - len] %= mod;
    } else {
      for (int i = 0; i < lim; i++)
        if ((i / len) % 10) a[i - len] -= a[i], a[i - len] %= mod;
    }
  }
}
}  // namespace FWT
int a[maxn], b[maxn], c[maxn], f[maxn];
int pw2[maxn];
int main() {
  int n = read();
  pw2[0] = 1;
  for (int i = 1; i <= n; i++) pw2[i] = (pw2[i - 1] << 1) % mod;
  while (n--) {
    int x = read();
    a[x]++;
    b[x] += x;
    if (b[x] >= mod) b[x] -= mod;
    c[x] += 1LL * x * x % mod;
    if (c[x] >= mod) c[x] -= mod;
  }
  lim = 1000000;
  FWT::main(a, 1);
  FWT::main(b, 1);
  FWT::main(c, 1);
  for (int i = 0; i < lim; i++) {
    if (!a[i]) continue;
    if (a[i] == 1)
      f[i] = c[i];
    else
      f[i] = 1LL * pw2[a[i] - 2] * (c[i] + 1LL * b[i] * b[i] % mod) % mod;
  }
  FWT::main(f, -1);
  for (int i = 0; i < lim; i++) f[i] = (f[i] % mod + mod) % mod;
  long long ans = 0;
  for (int i = 1; i < lim; i++) ans ^= 1LL * f[i] * i;
  printf("%lld", ans);
}
