#include <bits/stdc++.h>
int n, flag, count;
char a[105], b[105], ans[26 * 26];
bool G[26][26], visit[26];
void build(int l1, int l2) {
  int len = l1 <= l2 ? l1 : l2;
  for (int i = 0; i < len; i++) {
    if (a[i] != b[i]) {
      G[b[i] - 'a'][a[i] - 'a'] = true;
      return;
    }
  }
  if (l1 > l2) flag = 1;
}
void judge(int v) {
  if (flag) return;
  for (int i = 0; i < 26; i++)
    if (G[v][i]) {
      if (visit[i]) {
        flag = 1;
        break;
      }
      visit[i] = 1;
      judge(i);
      visit[i] = 0;
    }
}
void dfs(int v) {
  visit[v] = true;
  for (int i = 0; i < 26; i++)
    if (G[v][i] && !visit[i]) {
      dfs(i);
    }
  ans[count++] = v + 'a';
}
int main() {
  scanf("%d", &n);
  scanf("%s", a);
  for (int i = 1; i < n; i++) {
    scanf("%s", b);
    build(strlen(a), strlen(b));
    memset(a, 0, sizeof(a));
    strcpy(a, b);
    memset(b, 0, sizeof(b));
  }
  for (int i = 0; i < 26; i++)
    if (!flag) {
      visit[i] = 1;
      judge(i);
      visit[i] = 0;
    }
  memset(visit, 0, sizeof(visit));
  if (flag) {
    puts("Impossible");
    return 0;
  }
  for (int i = 0; i < 26; i++)
    if (!visit[i]) dfs(i);
  for (int i = 0; i < count; i++) printf("%c", ans[i]);
  puts("");
  return 0;
}
