#include <bits/stdc++.h>
using namespace std;
long long int mod = 1000000007;
bool cmp(string a, string b) { return a.size() < b.size(); }
int main() {
  long long int n;
  cin >> n;
  long long int i, j;
  vector<string> second(n);
  vector<string> t(n);
  string emp;
  for (i = 0; i < n; i++) {
    cin >> second[i];
  }
  for (i = 0; i < n; i++) {
    map<char, long long int> m;
    for (j = 0; j < 26; j++) m[j] = 0;
    for (j = 0; j < second[i].size(); j++) {
      m[second[i][j] - 'a']++;
    }
    for (j = 0; j < 26; j++) {
      if (m[j] % 2 == 1) {
        t[i].push_back('a' + j);
      }
    }
    if (t[i] == emp) {
      t[i] = "+";
    }
  }
  sort(t.begin(), t.end(), cmp);
  map<string, long long int> ans;
  long long int finans = 0;
  emp = "+";
  for (i = 0; i < n; i++) {
    if (t[i] == emp) {
      finans += ans[emp];
      ans[emp]++;
      for (j = 0; j < 26; j++) {
        string tp;
        tp.push_back(j + 'a');
        if (ans.count(tp) != 0) finans += ans[tp];
      }
    } else {
      finans += ans[t[i]];
      if (t[i].size() == 1) {
        finans += ans[emp];
      }
      finans += ans[t[i].substr(1, t[i].size() - 1)];
      finans += ans[t[i].substr(0, t[i].size() - 1)];
      for (j = 1; j < t[i].size() - 1; j++) {
        string tp = t[i].substr(0, j) + t[i].substr(j + 1, t[i].size() - j - 1);
        finans += ans[tp];
      }
      ans[t[i]]++;
    }
  }
  cout << finans << endl;
}
