#include <bits/stdc++.h>
using namespace std;
const int N = 111111;
int topo[205];
struct node {
  char a[105];
} e[105];
int n;
int g[30][30];
int f[30];
int main() {
  scanf("%d", &n);
  int i, j;
  for (i = 0; i < n; i++) {
    scanf("%s", e[i].a);
  }
  memset(f, 0, sizeof(f));
  memset(g, 0, sizeof(g));
  for (i = 1; i < n; i++) {
    int l1 = strlen(e[i].a);
    int l2 = strlen(e[i - 1].a);
    for (j = 0; j < l1 && j < l2; j++) {
      if (e[i].a[j] != e[i - 1].a[j]) {
        int x = e[i].a[j] - 'a';
        int y = e[i - 1].a[j] - 'a';
        if (g[x][y] == 0) f[y]++;
        g[x][y] = 1;
        break;
      }
    }
    if (l1 < l2 && j == l1) {
      printf("Impossible\n");
      return 0;
    }
  }
  queue<int> q;
  for (i = 0; i < 26; i++) {
    if (f[i] == 0) {
      q.push(i);
    }
  }
  int cnt = 0;
  while (!q.empty()) {
    int w = q.front();
    q.pop();
    topo[cnt++] = w;
    for (i = 0; i < 26; i++) {
      if (g[w][i] == 1) {
        f[i]--;
        if (f[i] == 0) q.push(i);
      }
    }
  }
  if (cnt != 26) {
    printf("Impossible\n");
    return 0;
  }
  for (i = cnt - 1; i >= 0; i--) {
    printf("%c", topo[i] + 'a');
  }
  printf("\n");
  return 0;
}
