#include <bits/stdc++.h>
bool T[200];
bool flag[256];
bool M[256][256];
int N;
char s[200][200];
int cnt[256];
char str[100];
int ans;
void dfs(char ch) {
  if (flag[ch] == 1) {
    printf("Impossible");
    exit(0);
  }
  flag[ch] = 1;
  str[ans++] = ch;
  for (int i = 'a'; i <= 'z'; i++)
    if (M[ch][i]) {
      cnt[i]--;
      if (cnt[i] == 0) dfs(i);
    }
  flag[ch] = 2;
}
int main() {
  int i, pos, j;
  scanf("%d", &N);
  for (i = 0; i < N; i++) scanf("%s", &s[i]);
  for (pos = 0; pos < 100; pos++)
    for (i = 1; i < N; i++) {
      if (s[i - 1][pos] == NULL) T[i] = true;
      if (T[i]) continue;
      if (s[i - 1][pos] == s[i][pos]) continue;
      if (s[i][pos] == NULL) {
        printf("Impossible");
        return 0;
      }
      if (!M[s[i - 1][pos]][s[i][pos]]) {
        M[s[i - 1][pos]][s[i][pos]] = true;
        cnt[s[i][pos]]++;
      }
      T[i] = true;
    }
  for (i = 'a'; i <= 'z'; i++)
    for (j = 'a'; j <= 'z'; j++)
      if (M[i][j] && M[j][i]) {
        printf("Impossible");
        return 0;
      }
  bool t = true;
  while (t) {
    t = false;
    for (i = 'a'; i <= 'z'; i++)
      if (cnt[i] == 0 && !flag[i]) {
        t = true;
        dfs(i);
      }
  }
  if (ans != 'z' - 'a' + 1)
    printf("Impossible");
  else
    printf("%s", str);
  return 0;
}
