func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAX = 105;   vector<int> adj[MAX];   string s[MAX];   int mark[MAX];   bool cycle;   string ans =   ;   void dfs(int v) {     mark[v] = 1;     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (mark[u] == 1) cycle = true;       if (!mark[u]) dfs(u);     }     mark[v] = 2;   }   void print(int v) {     mark[v] = 1;     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (!mark[u]) print(u);     }     ans +=  a  + v;   }   int main() {     ios::sync_with_stdio(false);     int n;     cin >> n;     for (int i = 0; i < n; i++) cin >> s[i];     for (int i = 0; i < n - 1; i++) {       int j = 0;       while (j < s[i].size() && j < s[i + 1].size() && s[i][j] == s[i + 1][j])         j++;       if (j == s[i + 1].size() && s[i].size() > s[i + 1].size()) {         cout <<  Impossible  << endl;         return 0;       }       if (j < s[i].size() && j < s[i + 1].size())         adj[s[i][j] -  a ].push_back(s[i + 1][j] -  a );     }     for (int i = 0; i < 26; i++)       if (!mark[i]) dfs(i);     if (cycle) {       cout <<  Impossible  << endl;       return 0;     }     memset(mark, 0, sizeof(mark));     for (int i = 0; i < 26; i++)       if (!mark[i]) print(i);     reverse(ans.begin(), ans.end());     cout << ans << endl;     return 0;   }   