#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
int cnt[100][100], Num[65][65][65][65], cur, id[1000], mod = 998244353;
vector<string> vec[50];
signed main(){
int n;
cin>>n;
for (int i=1;i<=n;i++){
string s;
cin>>s;
int k = s.size();
vec[k].push_back(s);
reverse(begin(s), end(s));
vec[k].push_back(s);
for (char c : s)
if (id[c] == 0)
id[c] = ++cur;
}
int Ans = 0;
for (int i=3;i<=10;i++){
sort(begin(vec[i]), end(vec[i]));
vec[i].resize(unique(begin(vec[i]), end(vec[i])) - begin(vec[i]));
for (string s : vec[i])
cnt[id[s[0]]][id[s[i-1]]]++;
for (int c1=1;c1<=cur;c1++){
for (int c2=1;c2<=cur;c2++){
for (int c3=1;c3<=cur;c3++){
for (int c4=1;c4<=cur;c4++)
Num[c1][c2][c3][c4] = cnt[c1][c2] * cnt[c2][c3] % mod * cnt[c3][c4] % mod * cnt[c4][c1] % mod;
}
}
}
for (int c1=1;c1<=cur;c1++){
for (int c2=1;c2<=cur;c2++){
for (int c3=1;c3<=cur;c3++){
for (int c4=1;c4<=cur;c4++){
for (int c5=1;c5<=cur;c5++){
for (int c6=1;c6<=cur;c6++){
for (int c7=1;c7<=cur;c7++){
for (int c8=1;c8<=cur;c8++)
Ans += Num[c1][c2][c3][c4] * Num[c5][c6][c7][c8] % mod * cnt[c1][c5] % mod * cnt[c2][c6] % mod * cnt[c3][c7] % mod * cnt[c4][c8] % mod;
}
}
}
}
}
}
}
for (string s : vec[i])
cnt[id[s[0]]][id[s[i-1]]] = 0;
}
cout<<Ans % mod<<'\n';
}
| # | 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... |