#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
#define pb push_back
#define fi first
#define se second
const int MAX = 2e5 + 5;
const int MOD = 1e9 + 7;
#define int ll
int swit(char c){
if('A' <= c && c <= 'Z')return (c - 'a' + 1);
else if('a' <= c && c <= 'z')return (c - 'A' + 27);
return (c - '0' + 53);
}
ll ad(ll x, ll y){
x %= MOD;
y %= MOD;
return (x + y) % MOD;
}
ll mul(ll x, ll y){
x %= MOD;
y %= MOD;
return (x *y) % MOD;
}
ll sub(ll a, ll b){
a %= MOD;
b %= MOD;
return (a - b + MOD) % MOD;
}
int chek(int a, int b, int c, int d){
if(a != b && b != c && c != d)return 24;
if(a != b && b != c && c == d)return 12;
if(a != b && b == c && c != d)return 12;
if(a == b && b != c && c != d)return 12;
if(a == b && b != c && c == d)return 6;
if(a == b && b == c && c != d)return 4;
if(a != b && b == c && c == d)return 4;
return 1;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
vector <string> v[11];
for(int i =0 ; i < n ; i++){
string s; cin >> s;
v[(int)s.size()].pb(s);
}
ll ans = 0;
for(int len = 3 ; len <= 10 ; len++){
set <string> can;
ll cnt[70][70];memset(cnt, 0, sizeof(cnt));
for(auto it : v[len]){
can.insert(it);
reverse(it.begin(), it.end());
can.insert(it);
}
for(auto it : can)cnt[swit(it[0])][swit(it.back())]++;
ll dp[70][70][70];
for(int i = 1 ; i <= 62 ; i++){
for(int j = 1 ; j <= 62 ; j++){
for(int k = 1 ; k <= 62 ; k++){
for(int l = 1 ; l <= 62 ; l++){
ll t = mul(cnt[i][l], mul(cnt[j][l], cnt[k][l]));
dp[i][j][k] = ad(dp[i][j][k], t);
}
}
}
}
ll tm = 0;
for(int i = 1 ; i <= 62 ; i++){
for(int j = i ; j <= 62 ; j++){
for(int k = j ; k <= 62 ; k++){
for(int l = k ; l <= 62 ; l++){
ll tmp = mul(dp[i][j][k], mul(dp[i][j][l], mul(dp[i][k][l], dp[j][k][l])));
tmp = mul(tmp, chek(i, j, k, l));
tm = ad(tm, tmp);
}
}
}
}
ans = ad(ans, tm);
}
cout << ans << endl;
return 0;
}
# | 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... |