#include <bits/stdc++.h>
using namespace std;
int n;
char s[105][105];
bool edge[26][26], visit[26];
int ans = true;
struct lll {
  int l, num;
};
bool com(lll x, lll y) { return x.l < y.l; }
lll level[26];
vector<int> v;
bool end() {
  for (int i = 0; i < 26; ++i) {
    for (int j = 0; j < 26; ++j) {
      if (edge[i][j]) return false;
    }
  }
  return true;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%s", s[i]);
  }
  for (int i = 0; i < n - 1; ++i) {
    int la = strlen(s[i]);
    int lb = strlen(s[i + 1]);
    int l = min(la, lb);
    int x = 0;
    while (1) {
      if (la <= x) break;
      if (lb <= x) {
        if (la > lb) ans = false;
        break;
      }
      if (s[i][x] != s[i + 1][x]) {
        edge[s[i][x] - 'a'][s[i + 1][x] - 'a'] = true;
        break;
      }
      x++;
    }
  }
  for (int i = 0; i < 26; ++i) {
    level[i].l = 0;
    level[i].num = i;
  }
  int ll = 1;
  while (ll <= 26) {
    int choose = -1;
    for (int i = 0; i < 26; ++i) {
      if (level[i].l > 0) continue;
      if (choose > 0) break;
      for (int j = 0; j < 26; ++j) {
        if (edge[j][i]) break;
        if (j == 25 && !edge[j][i]) choose = i;
      }
    }
    if (choose == -1) {
      ans = false;
      break;
    }
    level[choose].l = ll;
    ll++;
    for (int i = 0; i < 26; ++i) {
      edge[i][choose] = false;
      edge[choose][i] = false;
    }
  }
  sort(level, level + 26, com);
  if (!ans)
    printf("Impossible\n");
  else {
    for (int i = 0; i < 26; ++i) {
      printf("%c", level[i].num + 'a');
    }
    printf("\n");
  }
}
