#include <bits/stdc++.h>
using namespace std;
const int inf = (1 << 30) - 1;
const long long linf = (1ll << 62) - 1;
const int N = 100500;
int n;
string s[N];
vector<int> g[N];
int pos[N];
vector<int> ts;
bool used[N];
void topSort(int v) {
  if (used[v]) {
    return;
  }
  used[v] = true;
  for (int i : g[v]) {
    topSort(i);
  }
  ts.push_back(v);
}
int main() {
  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++) {
      int l = 0;
      while (l < ((int)(s[i]).size()) && l < ((int)(s[j]).size()) &&
             s[i][l] == s[j][l]) {
        l++;
      }
      if (l != ((int)(s[i]).size()) && l != ((int)(s[j]).size())) {
        g[s[i][l] - 'a'].push_back(s[j][l] - 'a');
        42;
      } else if (l == ((int)(s[j]).size())) {
        puts("Impossible");
        return 0;
      }
    }
  }
  for (int i = 0; i < 'z' - 'a' + 1; i++) {
    if (!used[i]) {
      topSort(i);
    }
  }
  reverse((ts).begin(), (ts).end());
  for (int i = 0; i < ((int)(ts).size()); i++) {
    pos[ts[i]] = i;
  }
  for (int i = 0; i < 'z' - 'a' + 1; i++) {
    for (int j : g[i]) {
      if (pos[i] > pos[j]) {
        puts("Impossible");
        return 0;
      }
    }
  }
  for (int i = 0; i < ((int)(ts).size()); i++) {
    printf("%c", (char)(ts[i] + 'a'));
  }
  puts("");
  return 0;
}
