#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int MAX = 62, MOD = 998'244'353;
int ctoi(char c) {
    if ('0' <= c && c <= '9')
        return c - '0';
    if ('a' <= c && c <= 'z')
        return 10 + c - 'a';
    return 10 + 'z' - 'a' + 1 + c - 'A';
}
int H[11][MAX][MAX], cnt[11][MAX][MAX][MAX];
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n;
    cin >> n;
    map<string, bool> in;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        if (in[s])
            continue;
        string rs = s;
        reverse(s.begin(), s.end());
        in[s] = in[rs] = true;
        int a = ctoi(s[0]), b = ctoi(s.back());
        H[s.length()][a][b]++;
        if (s != rs)
            H[s.length()][b][a]++;
    }
    ll res = 0;
    for (int l = 3; l <= 10; l++) {
        for (int i = 0; i < MAX; i++)
            for (int j = 0; j < MAX; j++)
                for (int k = 0; k < MAX; k++)
                    for (int w = 0; w < MAX; w++)
                        (cnt[l][i][j][k] += 1ll * H[l][i][w] * H[l][j][w] % MOD * H[l][k][w] % MOD) %= MOD;
        for (int i = 0; i < MAX; i++) {
            for (int j = 0; j < MAX; j++) {
                for (int k = 0; k < MAX; k++) {
                    for (int w = 0; w < MAX; w++) {
                        res = (res + 1ll * cnt[l][j][k][w] * cnt[l][i][k][w] % MOD * cnt[l][i][j][w] % MOD * cnt[l][i][j][k] % MOD) % MOD;
                    }
                }
            }
        }
    }
    cout << res;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |