#include <bits/stdc++.h>
using namespace std;
vector<list<int>> dag;
list<int> order;
bool ancestor[26];
bool check[26];
int i;
bool flag;
void dfs(int s) {
  list<int>::iterator iterl;
  if (check[s] == false) {
    check[s] = true;
    ancestor[s] = true;
    iterl = dag[s].begin();
    while (iterl != dag[s].end()) {
      if (ancestor[*iterl] == true) {
        flag = true;
        i = 26;
      }
      dfs(*iterl);
      iterl++;
    }
    order.push_back(s);
    ancestor[s] = false;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, n1, n2, j, m;
  cin >> n;
  string a, b;
  bool flg;
  list<int>::iterator iter;
  cin >> a;
  dag.resize(26);
  for (i = 0; i < n - 1; i++) {
    flg = true;
    cin >> b;
    n1 = a.length();
    n2 = b.length();
    m = min(n1, n2);
    j = 0;
    while (j < m) {
      if (a[j] != b[j]) {
        dag[b[j] - 'a'].push_back(a[j] - 'a');
        flg = false;
        break;
      }
      j++;
    }
    if (flg) {
      if (n2 < n1) {
        flag = true;
      }
    }
    a = b;
  }
  for (i = 0; i < 26; i++) {
    dfs(i);
  }
  if (!flag) {
    for (iter = order.begin(); iter != order.end(); iter++) {
      cout << (char)((*iter) + 'a');
    }
  } else
    cout << "Impossible";
  return 0;
}
