func_code_string: #include <bits/stdc++.h>   const int maxi = 2000000000;   const int maxq = 1000000000;   const double eps = 1e-10;   const double pi = 3.1415926535897932;   const double inf = 1e+18;   const int mo = 1000000007;   const int maxn = 500000;   using namespace std;   int n;   string s[555];   vector<char> v;   int le[555][555], color[5555], kol[5555];   void dfs(char ch) {     if (color[ch] == 1) {       puts( Impossible );       exit(0);     } else if (color[ch] == 2)       return;     color[ch] = 1;     for (char i =  a ; i <=  z ; i++)       if (le[ch][i]) {         dfs(i);       }     v.push_back(ch);     color[ch] = 2;   }   int main() {     cin >> n;     for (int i = 0; i < n; i++) {       cin >> s[i];     }     for (int i = 0; i < n; i++) {       for (int j = i + 1; j < n; j++) {         bool ok = false;         for (int k = 0; k < min(s[i].size(), s[j].size()); k++)           if (s[i][k] != s[j][k]) {             le[s[i][k]][s[j][k]] = 1;             kol[s[j][k]]++;             ok = true;             break;           }         if (ok == false && s[j].size() < s[i].size()) {           puts( Impossible );           return 0;         }       }     }     for (char ch =  a ; ch <=  z ; ch++)       if (color[ch] == 0 && kol[ch] == 0) dfs(ch);     reverse(v.begin(), v.end());     if (v.size() < 26) {       puts( Impossible );       return 0;     }     for (int i = 0; i < v.size(); i++) cout << v[i];     cout << endl;     return 0;   }   