func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> status(26);   vector<vector<int> > adjList(200000);   vector<string> names(100);   vector<int> ts;   vector<int> processing(26);   void dfs(int u, bool &valid) {     status[u] = 1;     processing[u] = true;     for (int j = 0; j < adjList[u].size(); j++) {       int v = adjList[u][j];       if (processing[v] == true) {         valid = false;         return;       }       if (status[v] == 0) {         dfs(v, valid);       }     }     processing[u] = false;     ts.push_back(u);   }   int main() {     int n;     cin >> n;     for (int i = 0; i < n; i++) {       cin >> names[i];     }     for (int i = 0; i < 26; i++) {       status[i] = 0;       processing[i] = false;     }     for (int i = 0; i < n - 1; i++) {       int c1 = -1;       int c2 = -1;       for (int j = 0; j < names[i].size() && j < names[i + 1].size(); j++) {         if (names[i][j] != names[i + 1][j]) {           c1 = names[i][j];           c2 = names[i + 1][j];           adjList[(c1 -  a )].push_back(c2 -  a );           break;         }       }       if (c1 == -1 && c2 == -1 && names[i].size() > names[i + 1].size()) {         cout <<  Impossible  << endl;         return 0;       }     }     for (int i = 0; i < 26; i++) {       if (status[i] == 0) {         bool valid = true;         dfs(i, valid);         if (!valid) {           cout <<  Impossible  << endl;           return 0;         }       }     }     for (int i = ts.size() - 1; i >= 0; i--) {       cout << (char)( a  + ts[i]);     }     cout << endl;     return 0;   }   