Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("avx2")
- using namespace std;
- const int CNT=62,SZ=7,MOD=998244353;
- int n;
- string a;
- vector<string> v;
- int cnt[SZ+1][CNT][CNT],cnt2[SZ+1][CNT][CNT][CNT],val[250];
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- for (int i='a';i<='z';++i) val[i]=i-'a';
- for (int i='A';i<='Z';++i) val[i]=i-'A'+26;
- for (int i='0';i<='9';++i) val[i]=i-'0'+52;
- cin>>n;
- while (n--)
- {
- cin>>a;
- v.pb(a);
- reverse(a.begin(),a.end());
- v.pb(a);
- }
- sort(v.begin(),v.end());
- for (int i=0;i<v.size();++i) if (i==0 || v[i]!=v[i-1])
- {
- a=v[i];
- ++cnt[a.size()-3][val[a[0]]][val[a.back()]];
- }
- for (int s=0;s<=SZ;++s) for (int i=0;i<CNT;++i) for (int j=0;j<CNT;++j) for (int k=0;k<CNT;++k) for (int l=0;l<CNT;++l) cnt2[s][i][j][k]=(cnt2[s][i][j][k]+1ll*cnt[s][i][l]*cnt[s][j][l]*cnt[s][k][l])%MOD;
- int an=0;
- for (int s=0;s<=SZ;++s) for (int i=0;i<CNT;++i) for (int j=0;j<CNT;++j) for (int k=0;k<CNT;++k) for (int l=0;l<CNT;++l) an=(an+1ll*cnt2[s][i][j][k]*cnt2[s][i][j][l]%MOD*cnt2[s][i][k][l]%MOD*cnt2[s][j][k][l])%MOD;
- cout<<an;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement