#include <bits/stdc++.h>
using namespace std;
int n, ma, u[109], g[109][109], lvl[109];
string s[109], ss;
vector<int> tops;
bool p;
void tps(int v) {
  u[v] = 1;
  for (int i = 1; i <= 26; i++) {
    if (g[v][i] && !u[i]) tps(i);
  }
  tops.push_back(v);
}
void dfs(int v, int dd) {
  u[v] = 1;
  lvl[v] = max(lvl[v], dd);
  for (int i = 1; i <= 26; i++) {
    if (g[v][i]) {
      if (u[i] == 1) {
        cout << "Impossible";
        p = 1;
        exit(0);
      } else {
        dfs(i, dd + 1);
        if (p) return;
      }
    }
  }
  u[v] = 2;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> s[i];
  for (int i = 1; i <= n; i++) {
    int x = s[i].length();
    ma = max(ma, x);
    for (int j = i + 1; j <= n; j++) {
      int y = s[j].length();
      if (y < x) {
        bool p = 1;
        for (int k = 0; k < y; k++)
          if (s[i][k] != s[j][k]) {
            p = 0;
            break;
          }
        if (p) {
          cout << "Impossible";
          return 0;
        }
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      int x = min(s[i].length(), s[j].length());
      for (int l = 0; l < x; l++) {
        if (s[i][l] != s[j][l]) {
          int x1 = s[i][l] - 'a' + 1, x2 = s[j][l] - 'a' + 1;
          if (g[x2][x1]) {
            cout << "Impossible";
            return 0;
          }
          g[x1][x2] = 1;
          break;
        }
      }
    }
  }
  for (int i = 1; i <= 26; i++) {
    if (!u[i]) tps(i);
  }
  for (int i = 1; i <= 26; i++) u[i] = 0;
  reverse(tops.begin(), tops.end());
  for (int i = 0; i < tops.size(); i++) {
    if (!u[tops[i]]) {
      dfs(tops[i], 1);
      if (p) return 0;
    }
  }
  for (int lv = 1; lv <= 26; lv++) {
    for (int j = 1; j <= 26; j++) {
      if (lvl[j] == lv) cout << (char)(j + 'a' - 1);
    }
  }
}
