#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g(26);
vector<int> col(26, 0);
vector<bool> used(26, 0);
string alph = "abcdefghijklmnopqrstuvwxyz";
void dfs(int v, bool &t) {
  col[v] = 1;
  for (int i = 0; i < g[v].size(); i++) {
    if (col[g[v][i]] == 1)
      t = 0;
    else {
      dfs(g[v][i], t);
    }
  }
  col[v] = 2;
}
void dfs(int v, string &st) {
  used[v] = 1;
  for (int i = 0; i < g[v].size(); i++) {
    if (!used[g[v][i]]) dfs(g[v][i], st);
  }
  st += alph[v];
}
int main() {
  string alph2;
  int n, i, pos1, pos2, j, len;
  bool p = 1;
  cin >> n;
  vector<string> s(n);
  for (i = 0; i < n; i++) {
    cin >> s[i];
  }
  for (i = 1; i < n; i++) {
    len = min(s[i].size(), s[i - 1].size());
    for (j = 0; j < len; j++) {
      if (s[i][j] != s[i - 1][j]) {
        pos1 = alph.find(s[i - 1][j]);
        pos2 = alph.find(s[i][j]);
        if (find(g[pos1].begin(), g[pos1].end(), pos2) == g[pos1].end())
          g[pos1].push_back(pos2);
        break;
      }
    }
    if (j == len && s[i - 1].size() > len) p = 0;
  }
  for (i = 0; i < 26; i++) {
    bool t = 1;
    if (col[i] == 0) dfs(i, t);
    if (!t) p = 0;
  }
  for (i = 0; i < 26; i++) {
    if (!used[i]) {
      string st;
      dfs(i, st);
      alph2 += st;
    }
  }
  reverse(alph2.begin(), alph2.end());
  if (!p)
    cout << "Impossible" << '\n';
  else {
    for (i = 0; i < alph2.size(); i++) {
      cout << alph2[i];
    }
  }
  return 0;
}
