#include <bits/stdc++.h>
using namespace std;
void add(int &x, int y) {
  x += y;
  if (x >= 1000000007) x -= 1000000007;
}
inline int read() {
  int x = 0;
  bool t = false;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = true, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return t ? -x : x;
}
int n, a[1000010], bin[1000010];
long long ans;
int s[1000010], ss[1000010], sss[1000010];
int pw[9] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
int bul[1 << 8], pls[1 << 8];
int G[1000010];
int main() {
  n = read();
  for (int i = 1; i <= n; ++i)
    a[i] = read(), s[a[i]] += 1, add(ss[a[i]], a[i]),
    add(sss[a[i]], 1ll * a[i] * a[i] % 1000000007);
  for (int i = 1; i < 1 << 6; ++i) bul[i] = bul[i >> 1] + (i & 1);
  for (int i = 1; i < 1 << 6; ++i)
    for (int j = 0; j < 6; ++j)
      if (i & (1 << j)) pls[i] += pw[j];
  int mx = 0;
  for (int i = 1; i <= n; ++i) mx = max(mx, a[i]);
  bin[0] = 1;
  for (int i = 1; i <= n; ++i) bin[i] = (bin[i - 1] << 1) % 1000000007;
  int S = 0;
  for (int i = 1; i <= 6; ++i)
    if (pw[i] > mx) {
      S = i;
      break;
    }
  for (int j = 0; j < S; ++j)
    for (int i = mx; i; --i)
      if (i / pw[j] % 10 < 9)
        add(s[i], s[i + pw[j]]), add(ss[i], ss[i + pw[j]]),
            add(sss[i], sss[i + pw[j]]);
  for (int i = 1; i <= mx; ++i)
    if (s[i] == 0)
      ;
    else if (s[i] == 1)
      G[i] = sss[i];
    else
      G[i] = 1ll * bin[s[i] - 2] * (sss[i] + 1ll * ss[i] * ss[i] % 1000000007) %
             1000000007;
  for (int j = 0; j < S; ++j)
    for (int i = 0; i <= mx; ++i)
      if (i / pw[j] % 10 < 9) add(G[i], 1000000007 - G[i + pw[j]]);
  for (int i = 1; i <= mx; ++i) ans ^= 1ll * i * G[i];
  printf("%I64d\n", ans);
  return 0;
}
