#include <bits/stdc++.h>
using namespace std;
char str[120][120];
int n;
int grid[26][26];
int ru[26], vis[26];
char ans[30];
int cheat;
void cmp(int a, int b) {
  int lena = strlen(str[a]);
  int lenb = strlen(str[b]);
  int len = min(lena, lenb);
  for (int i = 0; i < len; i++) {
    if (str[a][i] != str[b][i]) {
      int from = str[a][i] - 'a';
      int to = str[b][i] - 'a';
      grid[from][to] = 1;
      return;
    }
  }
  if (lena > lenb) cheat = 1;
}
void topoSort() {
  int i, j, t = 0;
  for (i = 0; i < 26; i++) {
    for (j = 0; j < 26; j++) {
      if (i != j && grid[i][j]) {
        ru[j]++;
      }
    }
  }
  while (1) {
    int found = 0;
    for (i = 0; i < 26; i++) {
      if (!vis[i] && ru[i] == 0) {
        found = 1;
        char ch = i + 'a';
        ans[t++] = ch;
        for (j = 0; j < 26; j++) {
          if (grid[i][j]) {
            ru[j]--;
          }
        }
        vis[i] = 1;
        break;
      }
    }
    if (!found) break;
  }
  if (strlen(ans) != 26)
    cout << "Impossible" << endl;
  else
    printf("%s\n", ans);
}
int main() {
  memset(grid, 0, sizeof(grid));
  memset(ru, 0, sizeof(ru));
  memset(vis, 0, sizeof(vis));
  cin >> n;
  int i, j;
  for (i = 0; i < n; i++) {
    scanf("%s", str[i]);
  }
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      cheat = 0;
      cmp(i, j);
      if (cheat) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
  }
  topoSort();
  return 0;
}
