#include <bits/stdc++.h>
using namespace std;
vector<int> topsort;
bool bio[50];
bool a[50][50];
string s[105];
int N;
bool imp;
bool printed[50];
bool solved[111][111];
void dfs(int x) {
  bio[x] = 1;
  for (int i = 'a' - '_'; i <= 'z' - '_'; i++) {
    if (a[i][x]) {
      if (!bio[i])
        dfs(i);
      else if (!printed[i])
        imp = 1;
    }
  }
  topsort.push_back(x);
  printed[x] = 1;
}
int main() {
  scanf("%d", &N);
  int maxl = 0;
  for (int i = 0; i < N; i++) {
    cin >> s[i];
    if (s[i].size() > maxl) maxl = s[i].size();
  }
  for (int i = 0; i < N; i++) {
    int ts = s[i].size();
    for (int j = ts; j < maxl; j++) {
      s[i] += "_";
    }
  }
  for (int k = 0; k < maxl; k++) {
    for (int i = 0; i < N - 1; i++) {
      for (int j = i + 1; j < N; j++) {
        if (!solved[i][j]) {
          if (s[i][k] != s[j][k]) {
            if (s[j][k] == '_') {
              printf("Impossible\n");
              return 0;
            } else {
              a[s[i][k] - '_'][s[j][k] - '_'] = 1;
              solved[i][j] = 1;
            }
          }
        }
      }
    }
  }
  for (int i = 'a' - '_'; i <= 'z' - '_'; i++) {
    if (!bio[i]) dfs(i);
  }
  if (imp)
    printf("Impossible\n");
  else {
    for (int i = 0; i < 26; i++) {
      cout << (char)(topsort[i] + '_');
    }
  }
  return 0;
}
