#include <bits/stdc++.h>
using namespace std;
const int dr[] = {1, 0, -1, 0, 1, 1, -1, -1};
const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1};
const int inf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1);
const double EPS = 1e-7;
const long long mod = 1e9 + 7;
const long long mod2 = 1e9 + 9;
long long mypow(long long x, long long y, long long p) {
  long long ret = 1;
  while (y) {
    if (y & 1) ret = (ret * x) % p;
    x = (x * x) % p;
    y /= 2;
  }
  return ret;
}
long long inv(long long x, long long p) { return mypow(x, p - 2, p); }
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
const int MAX = 1e5 + 3;
long long N, cnt[MAX][26], num[MAX];
long long C1, C2;
string S;
map<long long, long long> mp;
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ;
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> S;
    for (int j = 0; j < S.length(); j++) {
      long long cur = S[j] - 'a';
      cnt[i][cur] ^= 1;
    }
    long long val = 0;
    for (int j = 0; j < 26; j++) {
      if (cnt[i][j]) val |= (1 << j);
    }
    num[i] = val;
    mp[num[i]] += 1;
  }
  long long ans = 0;
  for (int i = 0; i < N; i++) {
    mp[num[i]] -= 1;
    ans += mp[num[i]];
    for (int j = 0; j < 26; j++) {
      long long x = num[i] ^ (1 << j);
      if (mp[x]) {
        ans += mp[x];
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
