#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, top, tot, d[105], st[105];
char a[105][105], b[105];
vector<int> e[105];
void insert(int u, int v) {
  e[u].push_back(v);
  d[v]++;
}
bool topsort() {
  while (top) {
    int now = st[top--];
    b[++tot] = now + 'a' - 1;
    for (int i = 0; i < e[now].size(); i++) {
      int v = e[now][i];
      d[v]--;
      if (!d[v]) st[++top] = v;
    }
  }
  for (int i = 1; i <= 26; i++)
    if (d[i]) return 0;
  return 1;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) scanf("%s", a[i] + 1);
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      int t1 = strlen(a[i] + 1), t2 = strlen(a[j] + 1);
      for (int k = 1; k <= t1; k++)
        if (k > t2) {
          puts("Impossible");
          return 0;
        } else if (a[i][k] != a[j][k]) {
          insert(a[i][k] - 'a' + 1, a[j][k] - 'a' + 1);
          break;
        }
    }
  for (int i = 1; i <= 26; i++)
    if (!d[i]) st[++top] = i;
  if (!topsort())
    puts("Impossible");
  else {
    for (int i = 1; i <= tot; i++) printf("%c", b[i]);
  }
  return 0;
}
