#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;
}
