Submission #1343620

#TimeUsernameProblemLanguageResultExecution timeMemory
1343620huypham2009Cubeword (CEOI19_cubeword)C++20
21 / 100
1195 ms15448 KiB
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int n, cnt[8][63][63], ans = 0, num = 0;
set<string> s[8];
map<char, int> mp;
int mul(int x, int y)
{
    return 1LL * x * y % mod;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        string res;
        cin >> res;
        s[res.size() - 3].insert(res);
        if(!mp[res[0]])
        {
            mp[res[0]] = ++num;
        }
        if(!mp[res.back()])
        {
            mp[res.back()] = ++num;
        }
        reverse(res.begin(), res.end());
        s[res.size() - 3].insert(res);
    }
    for(int i = 0; i <= 7; i++)
    {
        for(string x : s[i])
        {
            cnt[i][mp[x[0]]][mp[x.back()]]++;
        }
        for(int ver1 = 1; ver1 <= num; ver1++)
        {
            for(int ver2 = 1; ver2 <= num; ver2++)
            {
                for(int ver3 = 1; ver3 <= num; ver3++)
                {
                    for(int ver4 = 1; ver4 <= num; ver4++)
                    {
                        for(int ver5 = 1; ver5 <= num; ver5++)
                        {
                            for(int ver6 = 1; ver6 <= num; ver6++)
                            {
                                for(int ver7 = 1; ver7 <= num; ver7++)
                                {
                                    for(int ver8 = 1; ver8 <= num; ver8++)
                                    {
                                        int res = mul(cnt[i][ver1][ver2], mul(cnt[i][ver2][ver3], mul(cnt[i][ver3][ver4], mul(cnt[i][ver4][ver1], mul(cnt[i][ver1][ver5], mul(cnt[i][ver2][ver6], mul(cnt[i][ver3][ver7], mul(cnt[i][ver4][ver8], mul(cnt[i][ver5][ver6], mul(cnt[i][ver6][ver7], mul(cnt[i][ver7][ver8], cnt[i][ver8][ver5])))))))))));
                                        ans += res;
                                        ans %= mod;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...