#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
const int N=100;
vector<int> ma[N],pth;
char val[N];
ll cnt[20][300][300];
void dfs(int x)
{
pth.push_back(x);
for(auto y:pth)cout<<y<<' ';
cout<<endl;
for(auto y:ma[x])
{
dfs(y);
}
pth.pop_back();
}
bool gonxt()
{
val[0]='a';
val[8]++;
for(int i=8;i>=1;i--)
{
if(val[i]>'f')
{
val[i]='a';
val[i-1]++;
}
}
if(val[0]=='b')
{
return 0;
}
return 1;
}
ll count(int len)
{
ll ans=1;
for(int i=1;i<=8;i++)
{
for(auto j:ma[i])
ans*=cnt[len][val[i]][val[j]];
}
return ans;
}
int32_t main()
{
ma[1].push_back(2); // 1 2
ma[1].push_back(3);// 1 3
ma[1].push_back(5);// 1 5
ma[2].push_back(4);// 2 4
ma[2].push_back(6);// 2 6
ma[3].push_back(4); // 3 4
ma[3].push_back(7);// 3 7
ma[4].push_back(8);// 4 8
ma[5].push_back(6); // 5 6
ma[5].push_back(7); // 5 7
ma[6].push_back(8); // 6 8
ma[7].push_back(8); // 7 8
// dfs(1);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
int len=s.size();
string t=s;
reverse(begin(t),end(t));
cnt[len][s[0]][s.back()]++;
if(t==s)continue;
cnt[len][s.back()][s[0]]++;
}
ll sm=0,mod=998244353;
for(int len=3;len<=10;len++)
{
for(int x=1;x<=8;x++)
{
val[x]='a';
}
do
{
sm+=count(len)%mod;
sm%=mod;
}while(gonxt());
}
cout<<sm<<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... |