#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.1415926535897932384626433832795l;
template <typename T>
inline auto sqr(T x) -> decltype(x * x) {
  return x * x;
}
template <typename T1, typename T2>
inline bool umx(T1& a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2>
inline bool umn(T1& a, T2 b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const long long mod = 1000000007;
const int N = 1000000;
const int K = 6;
int n;
int a[N];
int kol[N];
long long g0[N];
long long g1[N];
long long g2[N];
int tw[6];
void calc(int a, int cur[]) {
  int sz = 0;
  for (int i = int(0); i < int(6); ++i) {
    cur[sz++] = a % 10;
    a /= 10;
  }
}
long long get_st(long long a, int st) {
  long long res = 1;
  while (st) {
    if (st & 1) {
      (res *= a) %= mod;
    }
    (a *= a) %= mod;
    st >>= 1;
  }
  return res;
}
long long st[N];
int main() {
  cout.setf(ios::showpoint | ios::fixed);
  cout.precision(20);
  cin >> n;
  for (int i = int(0); i < int(n); ++i) {
    scanf("%d", &a[i]);
    kol[a[i]]++;
  }
  tw[0] = 1;
  for (int i = int(1); i < int(6); ++i) tw[i] = tw[i - 1] * 10;
  st[0] = 1;
  for (int i = int(1); i < int(N); ++i) {
    (st[i] = st[i - 1] * 2) %= mod;
  }
  for (int i = int(N) - 1; i >= int(0); --i) {
    int cur[6];
    calc(i, cur);
    for (int msk = int(1); msk < int(1 << K); ++msk) {
      int odd = 0;
      int to = i;
      bool ok = 1;
      for (int j = int(0); j < int(K); ++j) {
        if (msk & (1 << j)) {
          if (cur[j] == 9) {
            ok = 0;
            break;
          }
          odd++;
          to += tw[j];
        }
      }
      if (!ok) continue;
      if (odd & 1) {
        (g0[i] += g0[to]) %= mod;
        (g1[i] += g1[to]) %= mod;
        (g2[i] += g2[to]) %= mod;
      } else {
        ((g0[i] -= g0[to]) += mod) %= mod;
        ((g1[i] -= g1[to]) += mod) %= mod;
        ((g2[i] -= g2[to]) += mod) %= mod;
      }
    }
    for (int j = int(0); j < int(kol[i]); ++j) {
      (++g0[i]) %= mod;
      (g1[i] += i) %= mod;
      (g2[i] += 1ll * i * i) %= mod;
    }
  }
  long long ans = 0;
  for (int to = int(0); to < int(N); ++to) {
    if (g0[to] > 1) {
      (g2[to] = g2[to] * st[g0[to] - 2] % mod +
                g1[to] * g1[to] % mod * st[g0[to] - 2]) %= mod;
    }
  }
  for (int i = int(N) - 1; i >= int(0); --i) {
    int cur[6];
    calc(i, cur);
    long long gg2 = 0;
    if (!g0[i]) {
      continue;
    };
    for (int msk = int(0); msk < int(1 << K); ++msk) {
      int odd = 0;
      int to = i;
      bool ok = 1;
      for (int j = int(0); j < int(K); ++j) {
        if (msk & (1 << j)) {
          if (cur[j] == 9) {
            ok = 0;
            break;
          }
          odd++;
          to += tw[j];
        }
      }
      if (!ok || g0[to] < 1) continue;
      if (!(odd & 1)) {
        gg2 += g2[to];
      } else {
        gg2 -= g2[to];
      }
      (gg2 += mod) %= mod;
    }
    ans ^= 1ll * i * gg2;
  }
  cout << ans << endl;
  return 0;
}
