#include <bits/stdc++.h>   struct str {     char s[110];   } p[110];   int n;   int ans[26], connect[26][26], v, e;   int toposort(int n, int mat[][26], int* ret) {     int d[26], i, j, k;     for (i = 0; i < n; i++)       for (d[i] = j = 0; j < n; d[i] += mat[j++][i])         ;     for (k = 0; k < n; ret[k++] = i) {       for (i = 0; d[i] && i < n; i++)         ;       if (i == n) return 0;       for (d[i] = -1, j = 0; j < n; j++) d[j] -= mat[i][j];     }     return 1;   }   int main() {     int i, j;     bool ok = true;     scanf( %d , &n);     memset(connect, 0, sizeof(connect));     for (i = 0; i < n; ++i) {       scanf( %s , p[i].s);       if (i > 0 && ok) {         for (j = 0; p[i].s[j] && p[i - 1].s[j]; ++j) {           if (p[i].s[j] != p[i - 1].s[j]) {             connect[p[i - 1].s[j] -  a ][p[i].s[j] -  a ] = 1;             break;           }         }         if (strlen(p[i].s) < strlen(p[i - 1].s) && j == strlen(p[i].s))           ok = false;       }     }     if (ok && toposort(26, connect, ans)) {       for (i = 0; i < 25; ++i) {         printf( %c , ans[i] +  a );       }       printf( %c n , ans[i] +  a );     } else {       puts( Impossible );     }     return 0;   }   