#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > myVec;
int a[35][35], ans[35], color[35], _count = 26, _f = 1;
string s[105];
void dfs(int node) {
  color[node] = 1;
  int j;
  for (j = 0; j < 26; j++) {
    if (a[node][j] == 1 && color[j] == 0)
      dfs(j);
    else if (a[node][j] == 1 && color[j] == 1)
      _f = 0;
  }
  ans[node] = _count;
  _count--;
  color[node] = -1;
}
int main() {
  int i, j, n, m, agn, t1, t2, n1, n2, g;
  cin >> n;
  for (i = 0; i <= 30; i++) {
    for (j = 0; j <= 30; j++) a[i][j] = 0;
    ans[i] = 30;
    color[i] = 0;
  }
  for (i = 0; i < n; i++) cin >> s[i];
  for (i = 1; i < n; i++) {
    agn = 0;
    n1 = s[i - 1].length();
    n2 = s[i].length();
    for (j = 0; j < min(n1, n2); j++) {
      t1 = s[i - 1][j] - 'a';
      t2 = s[i][j] - 'a';
      if (s[i - 1][j] != s[i][j] && a[t2][t1] != 1) {
        agn = 1;
        a[t1][t2] = 1;
        break;
      } else if (s[i - 1][j] != s[i][j] && a[t2][t1] == 1) {
        cout << "Impossible";
        return 0;
      }
    }
    if (agn == 0 && n1 >= n2) {
      cout << "Impossible";
      return 0;
    }
  }
  for (i = 0; i < 26; i++) {
    g = 0;
    for (j = 0; j < 26; j++)
      if (a[i][j] == 1) g = 1;
    if (color[i] == 0 && g == 1) {
      dfs(i);
    }
  }
  if (_f == 0) {
    cout << "Impossible";
    return 0;
  }
  for (i = 0; i < 26; i++) myVec.push_back(make_pair(ans[i], i));
  sort(myVec.begin(), myVec.end());
  for (i = 0; i < 26; i++) {
    printf("%c", 'a' + myVec[i].second);
  }
  return 0;
}
