func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pi = acos(-1.0);   const double eps = 1e-6;   vector<int> mp[105], ans;   char s[105][105];   int len[105], tmp[30];   queue<int> q;   bool solve(int x, int y) {     for (int i = 0; i < len[x] && i < len[y]; i++) {       if (s[x][i] != s[y][i]) {         mp[s[x][i] -  a ].push_back(s[y][i] -  a );         tmp[s[y][i] -  a ]++;         return true;       }     }     if (len[x] > len[y]) return false;   }   bool ok() {     for (int i = 0; i < 26; i++)       if (tmp[i] == 0) {         ans.push_back(i);         q.push(i);       }     while (!q.empty()) {       int u = q.front();       q.pop();       for (int i = 0; i < mp[u].size(); i++) {         int v = mp[u][i];         tmp[v]--;         if (tmp[v] == 0) {           q.push(v);           ans.push_back(v);         }       }     }     return ans.size() == 26;   }   int main() {     int n;     while (~scanf( %d , &n)) {       for (int i = 1; i <= n; i++) {         scanf( %s , s[i]);         len[i] = strlen(s[i]);       }       bool flag = 0;       for (int i = 1; i <= n; i++)         for (int j = i + 1; j <= n; j++)           if (!solve(i, j)) flag = 1;       if ((!flag) && ok()) {         for (int i = 0; i < 26; i++) printf( %c , ans[i] +  a );         printf(  n );       } else         printf( Impossible n );     }     return 0;   }   