func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e6 + 3;   bool in[113];   bool odw[113];   bool prze[113];   vector<int> v[113];   string tab[MAXN];   vector<char> ans;   bool por = false;   void DFS(int x) {     prze[x] = true;     odw[x] = true;     for (auto it : v[x]) {       if (prze[it])         por = true;       else if (!odw[it])         DFS(it);     }     ans.push_back(char(x +  a ));     prze[x] = false;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     int n, k, p;     bool check;     cin >> n >> k;     for (int i = 1; i <= n; i++) {       cin >> p;       for (int j = 0; j < k; j++) {         cin >> tab[p * k + j];         for (auto &it : tab[p * k + j]) in[it -  a ] = true;       }     }     for (int i = 1; i < n * k; i++) {       check = false;       for (unsigned int j = 0; j < min(tab[i].size(), tab[i - 1].size()); j++) {         if (tab[i][j] != tab[i - 1][j]) {           check = true;           v[tab[i - 1][j] -  a ].push_back(tab[i][j] -  a );           break;         }       }       if (!check && tab[i - 1].size() > tab[i].size()) por = true;     }     for (int i = 0; i < 26; i++) {       if (!odw[i] && in[i]) DFS(i);     }     if (por)       cout <<  IMPOSSIBLE ;     else {       for (int i = (int)(ans.size()) - 1; i >= 0; i--) cout << ans[i];     }     return 0;   }   