#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int cnt[11][26][26];
int main(){
    int n;cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        int a=s.front()-'a', b=s.back()-'a';
        cnt[s.size()][a][b]++;
        if(a!=b)
            cnt[s.size()][b][a]++;
    }
    int ans=0;
    for(int len=3;len<=10;len++){ // different lenghts
        for(int a=0;a<6;a++)
        for(int b=0;b<6;b++)
        for(int c=0;c<6;c++)
        for(int d=0;d<6;d++)
        for(int e=0;e<6;e++)
        for(int f=0;f<6;f++)
        for(int g=0;g<6;g++)
        for(int h=0;h<6;h++){
            vector<int> v={
                cnt[len][a][b], 
                cnt[len][a][c],
                cnt[len][c][d],
                cnt[len][b][d],
                cnt[len][a][e],
                cnt[len][b][f],
                cnt[len][c][g],
                cnt[len][d][h],
                cnt[len][e][f],
                cnt[len][e][g],
                cnt[len][f][h],
                cnt[len][g][h]
            };
            long long cur=1;
            for(int i=0;i<(int)v.size();i++){
                cur=(cur*v[i])%mod;
            }
            ans+=cur;
            ans%=mod;
        }
    }
    cout<<ans<<endl;
}   
| # | 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... |