#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
const int MAXN = 101;
const int MOD = 1e9 + 7;
const int MOD1 = 1e9 + 35011;
const int MOD2 = 1e9 + 18169;
const int INF = (1 << 30);
const long long INFl = 1e18;
int n, p[MAXN];
char s[MAXN][MAXN], ans[27];
set<int> g[26];
bool used[26];
int main() {
  memset(used, 0, 26 * sizeof(bool));
  scanf("%d\n", &n);
  for (size_t i = 0; i < n; ++i) {
    gets(s[i]);
    p[i] = strlen(s[i]);
  }
  for (int word = 1; word < n; ++word) {
    int pos = 0, len = min(p[word - 1], p[word]);
    while (pos < len && s[word][pos] == s[word - 1][pos]) pos++;
    if (pos == len && p[word - 1] > p[word]) {
      puts("Impossible");
      return 0;
    }
    if (pos == len) continue;
    int from = s[word - 1][pos] - 'a', to = s[word][pos] - 'a';
    g[from].insert(to);
  }
  ans[26] = '\0';
  int cur = 25, cnt = 26 * 26;
  while (cnt--) {
    for (int i = 0; i < 26; ++i) {
      if (g[i].size() == 0 && !used[i]) {
        used[i] = true;
        ans[cur--] = i + 'a';
        for (int j = 0; j < 26; ++j) {
          if (g[j].count(i)) g[j].erase(i);
        }
      }
    }
  }
  for (size_t i = 0; i < 26; ++i) {
    if (g[i].size()) {
      puts("Impossible");
      return 0;
    }
  }
  puts(ans);
  return 0;
}
