#include <bits/stdc++.h>
using namespace std;
char s[105][105], ans[30];
int in[105];
bool link[26][26];
queue<int> p;
bool solve() {
  int cnt = 0;
  for (int i = 0; i < 26; i++) {
    if (in[i] == 0) {
      p.push(i);
      ans[cnt++] = 'a' + i;
    }
  }
  while (!p.empty()) {
    int now = p.front();
    p.pop();
    for (int i = 0; i < 26; i++) {
      if (link[now][i]) {
        in[i]--;
        if (in[i] == 0) {
          p.push(i);
          ans[cnt++] = 'a' + i;
        }
      }
    }
  }
  ans[26] = '\0';
  if (cnt < 26)
    return false;
  else
    return true;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  bool flag = true;
  memset(link, false, sizeof(link));
  memset(in, 0, sizeof(in));
  for (int i = 0; i < n - 1 && flag; i++) {
    bool ok = false;
    int l1 = strlen(s[i]), l2 = strlen(s[i + 1]);
    for (int j = 0; j < l1 && j < l2 && !ok; j++) {
      if (s[i][j] != s[i + 1][j]) {
        ok = true;
        if (!link[s[i][j] - 'a'][s[i + 1][j] - 'a']) {
          in[s[i + 1][j] - 'a']++;
          link[s[i][j] - 'a'][s[i + 1][j] - 'a'] = true;
        }
      }
    }
    if (!ok && l1 > l2) flag = false;
  }
  if (!flag)
    printf("Impossible\n");
  else {
    flag = solve();
    if (!flag)
      printf("Impossible\n");
    else
      printf("%s", ans);
  }
  return 0;
}
