#include <bits/stdc++.h>
using namespace std;
const int k = 62;
int dp[k][k][k];
int cnt[k][k];
map<char, int> ptr;
int comb[2][2][2] = {{{24, 12}, {12, 4}}, {{12, 6}, {4, 1}}};
void clear() {
  for (int a = 0; a < k; a++) {
    for (int b = 0; b < k; b++) {
      for (int c = 0; c < k; c++) {
        dp[a][b][c] = 0;
      }
    }
  }
}
int solve(vector<vector<int>>& cnt) {
  clear();
  for (int a = 0; a < k; a++) {
    for (int b = 0; b < k; b++) {
      for (int f = a; f < k; f++) {
        for (int d = f; d < k; d++) {
          dp[a][f][d] =
              (1ll * dp[a][f][d] + 1ll * cnt[b][a] * cnt[b][f] * cnt[b][d]) %
              998244353;
        }
      }
    }
  }
  int64_t ret = 0;
  for (int a = 0; a < k; a++) {
    for (int f = a; f < k; f++) {
      for (int g = f; g < k; g++) {
        for (int d = g; d < k; d++) {
          ret += 1ll * dp[a][f][d] * dp[f][g][d] % 998244353 * dp[a][f][g] %
                 998244353 * dp[a][g][d] % 998244353 *
                 comb[a == f][f == g][g == d];
          ret %= 998244353;
        }
      }
    }
  }
  return ret;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  int64_t ans = 0;
  cin >> n;
  unordered_set<string> S[11];
  vector<string> arr;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    S[((int)(s).size())].insert(s);
    reverse((s).begin(), (s).end());
    S[((int)(s).size())].insert(s);
  }
  for (char i = 'a'; i <= 'z'; i++) ptr[i] = 0;
  for (char i = 'A'; i <= 'Z'; i++) ptr[i] = 0;
  for (char i = '0'; i <= '9'; i++) ptr[i] = 0;
  int ind = 0;
  for (auto& p : ptr) {
    p.second = ind++;
  }
  for (int i = 3; i <= 10; i++) {
    if (S[i].empty()) continue;
    vector<vector<int>> cnt(k, vector<int>(k, 0));
    for (auto p : S[i]) {
      cnt[ptr[p[0]]][ptr[p[i - 1]]]++;
    }
    ans += solve(cnt);
  }
  cout << ans % 998244353;
}
