#include <bits/stdc++.h>
using namespace std;
int n;
bool e[26][26];
bool v[26];
int ans[26];
string str[100];
bool dfs(int x, int s) {
  if (v[s] == true && s == x) return false;
  if (v[s]) return true;
  v[s] = true;
  for (int i = 0; i < 26; i++) {
    if (e[s][i]) {
      if (!dfs(x, i)) return false;
    }
  }
  return true;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> str[i];
  for (int i = 1; i < n; i++) {
    int s = min(str[i - 1].size(), str[i].size());
    bool ok = false;
    for (int j = 0; j < s; j++) {
      if (str[i - 1][j] != str[i][j]) {
        e[str[i - 1][j] - 'a'][str[i][j] - 'a'] = true;
        ok = true;
        break;
      }
    }
    if (!ok) {
      if (str[i].size() < str[i - 1].size()) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    memset(v, 0, sizeof(v));
    if (!dfs(i, i)) {
      cout << "Impossible" << endl;
      return 0;
    }
  }
  memset(v, 0, sizeof(v));
  int pos = 0;
  while (true) {
    bool end = true;
    for (int i = 0; i < 26; i++)
      if (!v[i]) {
        end = false;
        break;
      }
    if (end) break;
    for (int i = 0; i < 26; i++) {
      if (v[i]) continue;
      bool ok = true;
      for (int j = 0; j < 26; j++) {
        if (e[j][i]) {
          ok = false;
          break;
        }
      }
      if (ok) {
        for (int j = 0; j < 26; j++) {
          e[i][j] = false;
        }
        ans[i] = pos;
        pos++;
        v[i] = true;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < 26; j++) {
      if (ans[j] == i) {
        cout << (char)('a' + j);
      }
    }
  }
  cout << endl;
}
