#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-9;
const int maxn = 3e3;
const long long inf = 1e9 + 7;
string s[100];
int tab[100][100];
int used[100];
bool comp(string s1, string s2) {
  bool end = true;
  for (int i = 0; i < min(s1.length(), s2.length()); ++i) {
    if (s1[i] == s2[i]) continue;
    tab[s2[i] - 'a'][s1[i] - 'a'] = 1;
    end = false;
    break;
  }
  return (!end) || (s1.length() <= s2.length());
}
bool check(int v) {
  if (used[v] == 1) return false;
  used[v] = 1;
  for (int i = 0; i < 26; ++i) {
    if (tab[i][v] == 1) {
      if (!check(i)) return false;
    }
  }
  used[v] = 2;
  return true;
}
void dfs(int v) {
  if (used[v] == 1) return;
  used[v] = 1;
  for (int i = 0; i < 26; ++i) {
    if (tab[v][i] == 1) {
      dfs(i);
    }
  }
  cout << (char)('a' + v);
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> s[i];
  }
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      if (!comp(s[i], s[j])) {
        cout << "Impossible";
        return 0;
      }
    }
  }
  for (int i = 0; i < 26; ++i) {
    if (used[i] == 0) {
      if (!check(i)) {
        cout << "Impossible";
        return 0;
      }
    }
  }
  for (int i = 0; i < 26; ++i) used[i] = 0;
  for (int i = 0; i < 26; ++i) {
    if (!used[i]) {
      dfs(i);
    }
  }
  return 0;
}
