#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i = a; i < b;++i)
#define pb push_back
#define int long long
using namespace std;
const int M = 998244353;
char skaluj[1000];
int pot[5][5];
int32_t main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
int n;
cin>>n;
set<string> S[11];
FOR(i,0,n){
string W;
cin>>W;
S[W.size()].insert(W);
reverse(W.begin(),W.end());
S[W.size()].insert(W);
}
pot[0][0] = 1;
pot[0][1] = 6;
pot[1][0] = 4;
pot[1][1] = 12;
pot[2][0] = 12;
pot[2][1] = 24;
FOR(i,0,10){
char c = '0' + i;
skaluj[c] = i;
}
FOR(i,0,26){
char c = 'a' + i;
skaluj[c] = i + 10;
}
FOR(i,0,26){
char c = 'A' + i;
skaluj[c] = i + 36;
}
int suma = 0;
FOR(i,3,11){
if(S[i].size() == 0){continue;}
int dp[64][64][64];
int zlicz[64][64];
FOR(j,0,64){
FOR(k,0,64){
FOR(l,0,64){
dp[j][k][l] = zlicz[j][k] = 0;
}
}
}
for(auto y : S[i]){
int x1 = skaluj[y[0]];
int y1 = skaluj[y[i - 1]];
zlicz[x1][y1]++;
}
FOR(j,0,64){
FOR(k,j,64){
FOR(l,k,64){
FOR(m,0,64){
dp[j][k][l] = (dp[j][k][l] + zlicz[j][m] * zlicz[k][m] * zlicz[l][m]) % M;
}
}
}
}
FOR(j,0,64){
FOR(k,j,64){
FOR(l,k,64){
FOR(m,l,64){
int cnt = 0,cnt1 = 0;
if(j != k){++cnt;}
if(k != l){++cnt1;}
if(l != m){++cnt;}
suma = (suma + (((dp[k][l][m] * dp[j][l][m]) % M * (dp[j][k][m] * dp[j][k][l])) % M) * pot[cnt][cnt1]) % M;
}
}
}
}
}
cout<<suma;
}
# | 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... |