func_code_string: #include <bits/stdc++.h>   using namespace std;   void _print(int t) { cerr << t; }   void _print(string t) { cerr << t; }   void _print(char t) { cerr << t; }   void _print(long double t) { cerr << t; }   void _print(double t) { cerr << t; }   void _print(unsigned long long t) { cerr << t; }   template <class T, class V>   void _print(pair<T, V> p);   template <class T>   void _print(vector<T> v);   template <class T>   void _print(set<T> v);   template <class T, class V>   void _print(map<T, V> v);   template <class T>   void _print(multiset<T> v);   template <class T, class V>   void _print(pair<T, V> p) {     cerr <<  { ;     _print(p.first);     cerr <<  , ;     _print(p.second);     cerr <<  } ;   }   void solve() {     int n, k;     cin >> n >> k;     string A[n];     map<string, int> m;     for (int i = (0); i < (n); i++) {       cin >> A[i];       m[A[i]]++;     }     long long ans = 0;     sort(A, A + n);     set<string> st;     for (int i = (0); i < (n - 2); i++) {       for (int j = (i + 1); j < (n - 1); j++) {         string s(k,  . );         for (int z = (0); z < (k); z++) {           if (A[i][z] == A[j][z]) {             s[z] = A[i][z];           } else {             int tmp = A[i][z] + A[j][z];             if (tmp == 152) {               s[z] =  T ;             } else if (tmp == 153) {               s[z] =  S ;             } else {               s[z] =  E ;             }           }         }         string tmp = A[i] + A[j] + s;         if (s.compare(A[i]) >= 0 && s.compare(A[j]) >= 0 &&             st.find(tmp) == st.end()) {           ans += m[s];           if (s.compare(A[i]) == 0) {             ans--;           }           if (s.compare(A[j]) == 0) {             ans--;           }           st.insert(tmp);         }       }     }     cout << ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     int tt = 1;     while (tt--) {       solve();     }     return 0;   }   