#include <bits/stdc++.h>
using namespace std;
const int N = 100 + 10;
const int M = 26 + 10;
const int MAX = 26;
char s[N][N];
int n, len[N], l, r, a[M][M], in[M], vis[M], ans[M], p, sum;
vector<int> f[M * M];
queue<int> q;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", s[i] + 1);
    len[i] = strlen(s[i] + 1);
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      l = r = 1;
      while (l <= len[i] && r <= len[j]) {
        if (s[i][l] != s[j][r]) break;
        l++;
        r++;
      }
      if (l <= len[i] && r <= len[j])
        a[s[i][l] - 'a'][s[j][r] - 'a'] = 1;
      else if (len[i] > len[j]) {
        puts("Impossible");
        return 0;
      }
    }
  memset(in, -1, sizeof(in));
  for (int i = 0; i < MAX; i++)
    for (int j = 0; j < MAX; j++)
      if (a[i][j]) {
        f[i].push_back(j);
        if (!~in[j]) in[j]++;
        in[j]++;
        if (!~in[i]) in[i] = 0;
      }
  for (int i = 0; i < MAX; i++)
    if (!in[i]) q.push(i);
  while (!q.empty()) {
    ans[sum++] = p = q.front();
    q.pop();
    vis[p] = 1;
    for (int i = 0; i < f[p].size(); i++)
      if (!--in[f[p][i]]) {
        q.push(f[p][i]);
        if (vis[f[p][i]]) {
          puts("Impossible");
          return 0;
        }
      }
  }
  for (int i = 0; i < MAX; i++)
    if (in[i] > 0) {
      puts("Impossible");
      return 0;
    }
  for (int i = 0; i < MAX; i++)
    if (!vis[i]) ans[sum++] = i;
  for (int i = 0; i < MAX; i++) putchar(ans[i] + 'a');
  return 0;
}
