func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:251700000 )   using namespace std;   const int INF = 2e9;   const double eps = 1e-6;   const int M = 1e5 + 5;   int n;   string s[M];   bool us[M];   char SS[M];   string get_s() {     scanf(  %s , &SS);     return string(SS);   }   int main() {     scanf( %d , &n);     vector<int> c(27);     vector<int> dd(27, -1);     for (int q = 0; q < n; ++q) {       s[q] = get_s();       for (int i = 0; i < 27; ++i) c[i] = 0;       for (int j = 0; j < s[q].size(); ++j) ++c[s[q][j] -  a ];       for (int i = 0; i < 27; ++i)         if (c[i] > 1) cout <<  NO , exit(0);       for (int i = 0; i < 27; ++i) {         if (dd[i] == -1 || !c[i] || us[dd[i]]) continue;         int l, r, l1, r1;         for (int j = 0; j < s[q].size(); ++j)           if (s[q][j] -  a  == i) l = j;         for (int j = 0; j < s[dd[i]].size(); ++j)           if (s[dd[i]][j] -  a  == i) r = j;         l1 = l, r1 = r;         while (l >= 0 && r >= 0) {           if (s[q][l] != s[dd[i]][r]) cout <<  NO , exit(0);           --l, --r;         }         if (r >= 0) s[q] = s[dd[i]].substr(0, r + 1) + s[q], l1 += r + 1;         l = l1, r = r1;         while (l < s[q].size() && r < s[dd[i]].size()) {           if (s[q][l] != s[dd[i]][r]) cout <<  NO , exit(0);           ++l, ++r;         }         while (r < s[dd[i]].size()) {           s[q] += s[dd[i]][r];           ++r;         }         us[dd[i]] = 1;       }       for (int i = 0; i < 27; ++i) c[i] = 0;       for (int j = 0; j < s[q].size(); ++j)         ++c[s[q][j] -  a ], dd[s[q][j] -  a ] = q;       for (int i = 0; i < 27; ++i)         if (c[i] > 1) cout <<  NO , exit(0);     }     vector<string> ab;     for (int i = 0; i < n; ++i)       if (!us[i]) ab.push_back(s[i]);     sort((ab).begin(), (ab).end());     for (int i = 0; i < ab.size(); ++i) cout << ab[i];   }   