//Trumling ©
//Αφόδευε υψηλά και ηγνάντει
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define F first
#define S second
#define enter cout<<'\n';
#define INF 99999999999999999
#define MOD 998244353
#define all(x) x.begin(),x.end()
#define out(x) for(auto y:x)cout<<y;enter
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n;
cin>>n;
vector<vector<vector<ll>>>arr(11,vector<vector<ll>>(26,vector<ll>(26,0)));
set<ll>se;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
ll curr=0;
for(int i=0;i<s.size();i++)
{
curr*=26;
curr+=(s[i]-'a');
}
if(se.find(curr)==se.end())
{
arr[s.size()][s[0]-'a'][s[s.size()-1]-'a']++;
se.insert(curr);
}
for(int i=0;i<s.size()/2;i++)
swap(s[i],s[s.size()-1-i]);
curr=0;
for(int i=0;i<s.size();i++)
{
curr*=26;
curr+=(s[i]-'a');
}
if(se.find(curr)==se.end())
{
arr[s.size()][s[0]-'a'][s[s.size()-1]-'a']++;
se.insert(curr);
}
}
ll ans=0;
for(int c=3;c<=10;c++)
for(int i=0;i<6;i++)
for(int j=0;j<6;j++)
for(int ii=0;ii<6;ii++)
for(int jj=0;jj<6;jj++)
{
ll ans1=0,ans2=0,ans3=0,ans4=0;
for(int r=0;r<6;r++)
{
ans1+=(((arr[c][i][r]*arr[c][j][r])%MOD)*arr[c][jj][r])%MOD;
ans1%=MOD;
}
for(int r=0;r<6;r++)
{
ans2+=(((arr[c][i][r]*arr[c][j][r])%MOD)*arr[c][ii][r])%MOD;
ans2%=MOD;
}
for(int r=0;r<6;r++)
{
ans3+=(((arr[c][i][r]*arr[c][ii][r])%MOD)*arr[c][jj][r])%MOD;
ans3%=MOD;
}
for(int r=0;r<6;r++)
{
ans4+=(((arr[c][j][r]*arr[c][jj][r])%MOD)*arr[c][ii][r])%MOD;
ans4%=MOD;
}
ans+=(((ans1*ans2)%MOD)*((ans3*ans4)%MOD))%MOD;
ans%=MOD;
}
cout<<ans;
}
# | 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... |