#include <bits/stdc++.h>
using namespace std;
int n, grau[27];
vector<string> in;
vector<int> adj[27];
vector<int> lista;
bool topsort() {
  priority_queue<pair<int, int>, vector<pair<int, int>>,
                 greater<pair<int, int>>>
      pq;
  for (int i = 0; i < 26; i++) {
    if (!grau[i]) pq.push({0, i});
  }
  while (!pq.empty()) {
    int u = pq.top().second;
    pq.pop();
    lista.push_back(u);
    for (auto i : adj[u]) {
      grau[i]--;
      if (!grau[i]) {
        pq.push({0, i});
      }
    }
  }
  if ((int)lista.size() < 26) {
    return false;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  in.resize(n);
  for (int i = 0; i < n; i++) {
    cin >> in[i];
  }
  for (int i = 1; i < n; i++) {
    string um = in[i - 1];
    string dois = in[i];
    int ok = 0;
    for (int j = 0; j < min((int)um.size(), (int)dois.size()); j++) {
      if (um[j] != dois[j]) {
        ok = 1;
        adj[um[j] - 'a'].push_back(dois[j] - 'a');
        grau[dois[j] - 'a']++;
        break;
      }
    }
    if (!ok && (int)um.size() > (int)dois.size()) {
      cout << "Impossible\n";
      return 0;
    }
  }
  bool ok = topsort();
  if (!ok) {
    cout << "Impossible\n";
  } else {
    for (int i = 0; i < (int)lista.size(); i++) {
      cout << char(lista[i] + 'a');
    }
    cout << '\n';
  }
  return 0;
}
