#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
char str[maxn][maxn];
int mp[maxn][maxn];
int in[maxn];
int num[maxn];
int f[maxn];
int main() {
  int n;
  while (cin >> n) {
    for (int i = 0; i < n; i++) {
      scanf("%s", str[i]);
    }
    for (int i = 0; i < n; i++) {
      num[i] = strlen(str[i]);
    }
    memset(mp, 0, sizeof(mp));
    memset(in, 0, sizeof(in));
    int xflag = 0;
    for (int i = 0; i < n - 1; i++) {
      int m = min(num[i], num[i + 1]);
      int xnum = 0;
      for (int j = 0; j < m; j++) {
        if (str[i][j] != str[i + 1][j]) {
          int x = str[i][j] - 'a';
          int y = str[i + 1][j] - 'a';
          if (mp[x][y] == 0) {
            mp[x][y] = 1;
            in[y]++;
          }
          break;
        }
        xnum++;
      }
      if (xnum == m) {
        if (num[i] > num[i + 1]) {
          xflag = 1;
        }
      }
    }
    if (xflag) {
      puts("Impossible");
      continue;
    }
    int num = 0;
    int t;
    while (num != 26) {
      int flag = 0;
      for (int i = 0; i < 26; i++) {
        if (in[i] == 0) {
          flag = 1;
          in[i] = -1;
          f[num++] = i;
          t = i;
          break;
        }
      }
      if (!flag) break;
      for (int i = 0; i < 26; i++) {
        if (mp[t][i] == 1) {
          in[i]--;
        }
      }
    }
    if (num != 26) {
      cout << "Impossible" << endl;
      continue;
    }
    for (int i = 0; i < 26; i++) printf("%c", 'a' + f[i]);
    cout << endl;
  }
}
