#include <bits/stdc++.h>
using namespace std;
bool flag = 1;
vector<int> used;
vector<vector<int> > g;
vector<int> tout;
void dfs(int v) {
  used[v] = 1;
  for (int to : g[v]) {
    if (!used[to]) {
      dfs(to);
    } else {
      if (used[to] == 1) flag = 0;
    }
  }
  used[v] = 2;
  tout.push_back(v);
}
int main() {
  int n;
  cin >> n;
  vector<string> s(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
  }
  g.resize(26);
  for (int i = 1; i < n; i++) {
    int j = 0;
    while (j < min(s[i - 1].size(), s[i].size()) && s[i][j] == s[i - 1][j]) j++;
    if (j == min(s[i - 1].size(), s[i].size())) {
      if (s[i - 1].size() > s[i].size()) flag = 0;
      continue;
    }
    g[s[i - 1][j] - 'a'].push_back(s[i][j] - 'a');
  }
  used.resize(26);
  for (int i = 0; i < 26; i++) {
    if (!used[i]) {
      dfs(i);
    }
  }
  if (!flag) {
    cout << "Impossible";
    return 0;
  }
  reverse(tout.begin(), tout.end());
  string t = "";
  for (int i : tout) {
    cout << char('a' + i);
  }
}
