#include <bits/stdc++.h>
template <class _, class __>
bool checkmax(_ &a, __ b) {
  return a < b ? a = b, true : false;
}
template <class _, class __>
bool checkmin(_ &a, __ b) {
  return a > b ? a = b, true : false;
}
using namespace std;
int n;
char s[10086][5];
int dp[1 << 24];
int main() {
  cin >> n;
  for (int i = (1), i_end_ = (n); i <= i_end_; ++i) {
    scanf("%s", s[i]);
    for (int j = (1), j_end_ = (1 << 3); j < j_end_; ++j) {
      int cnt = 0;
      int now = 0;
      for (int k = (0), k_end_ = (3); k < k_end_; ++k) {
        if ((1 << k) & j) cnt++, now |= (1 << (s[i][k] - 'a'));
      }
      if (cnt & 1)
        dp[now]++;
      else
        dp[now]--;
    }
  }
  for (int i = (0), i_end_ = (24); i < i_end_; ++i) {
    int bu = (1 << 24) - 1 - (1 << i);
    for (int j = bu;; j = (j - 1) & bu) {
      dp[j ^ (1 << i)] += dp[j];
      if (!j) break;
    }
  }
  int ans = 0;
  for (int i = (0), i_end_ = (1 << 24); i < i_end_; ++i) ans ^= dp[i] * dp[i];
  cout << ans << endl;
  return EXIT_SUCCESS;
}
