Submission #1273429

#TimeUsernameProblemLanguageResultExecution timeMemory
1273429cow123Cubeword (CEOI19_cubeword)C++20
84 / 100
162 ms16496 KiB
#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;
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);
    }
    int suma = 0;
    FOR(i,3,11){
        int dp[37][37][37];
        int zlicz[37][37];
        FOR(j,0,36){
            FOR(k,0,36){
                FOR(l,0,36){
                    dp[j][k][l] = zlicz[j][k] = 0;
                }
            }
        }
        if(S[i].size() == 0){continue;}
        for(auto y : S[i]){
            int x1 = y[0] - 'a';
            int y1 = y[i - 1] - 'a';
            if(x1 < 0){x1+=48;}
            if(y1 < 0){y1+=48;}
            zlicz[x1][y1]++;
        }
        FOR(j,0,33){
            FOR(k,0,33){
                FOR(l,0,33){
                    FOR(m,0,33){
                        dp[j][k][l] = (dp[j][k][l] + zlicz[j][m] * zlicz[k][m] * zlicz[l][m]) % M;
                    }
                }
            }
        }
        FOR(j,0,33){
            FOR(k,0,33){
                FOR(l,0,33){
                    FOR(m,0,33){
                        suma = (suma + (((((dp[k][l][m]) * dp[j][l][m]) % M) * dp[j][k][m]) % M) * dp[j][k][l]) % M;
                    }
                }
            }
        }
    }
    cout<<suma;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...