Submission #1245608

#TimeUsernameProblemLanguageResultExecution timeMemory
1245608abdelhakimCubeword (CEOI19_cubeword)C++20
0 / 100
325 ms6572 KiB
#include <bits/stdc++.h>
#define ll long long
#define inf (ll)(1e15) 
#define mod (ll)998244353
#define dbg(x) cerr <<#x << ' ' << x <<endl;
using namespace std;

void printvec(vector<ll>& v)
{
  for (auto &&i : v)
  {
    cout <<i<<' ';
  }
  cout << endl;
}
map<pair<char,char>,ll> mp;
ll anss(ll i, ll n, string cur)
{
  if(i==8)
  {
    ll ans=1;
    for (int j=0;j<7;j+=2)
    {
      ans*=mp[{cur[j],cur[j+1]}];
      ans%=mod;
    }
    for (int j=0;j<1;j++)
    {
      ans*=mp[{cur[j],cur[j+2]}];
      ans%=mod;
    }
    for (int j=4;j<6;j++)
    {
      ans*=mp[{cur[j],cur[j+2]}];
      ans%=mod;
    }
    for (int j=0;j<4;j++)
    {
      ans*=mp[{cur[j],cur[j+4]}];
      ans%=mod;
    }
    return ans;
  }
  ll sm=0;
  for (char cr='a';cr<='f';cr++)
  {
    sm+=anss(i+1,n,cur+cr);
    sm%=mod;
  }
  return sm;
}
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  ll n;
  cin>>n;
  vector<string> s(n);
  ll sz=0;
  for (int i=0;i<n;i++)
  {
    cin>>s[i];
    sz=max(sz,(ll)s[i].size());
  }
  map<string,bool> vis;
  // vector<string> s2;
  for (int i=0;i<n;i++)
  {
    if(s[i].size()==sz && !vis[s[i]])
    {
      string rev=s[i];
      reverse(rev.begin(),rev.end());
      mp[{s[i][0],s[i].back()}]++;
      if(rev!=s[i])mp[{s[i].back(),s[i][0]}]++;
      vis[s[i]]=1;
      vis[rev]=1;
      // s2.push_back(s[i]);
    }
    
    
  }
  cout << anss(0,n,"") << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...