#include <bits/stdc++.h>
using namespace std;
int n;
int adj[26][26], u[26];
int main() {
  cin >> n;
  int a, b, c;
  vector<string> vv;
  for (int i = (0); i < (n); ++i) {
    string s;
    cin >> s;
    vv.push_back(s);
  }
  vector<pair<int, int> > e;
  for (int i = (0); i < (n); ++i) {
    for (int ii = (i + 1); ii < (n); ++ii) {
      string x = vv[i], y = vv[ii];
      int j = 0, l = min(x.size(), y.size()), m = max(x.size(), y.size());
      int f = 1;
      while (j < l) {
        if (x[j] == y[j]) {
          ++j;
        } else {
          f = 0;
          a = x[j] - 'a';
          b = y[j] - 'a';
          adj[a][b] = 1;
          break;
        }
      }
      if (j == l) {
        if (x.size() > y.size()) {
          cout << "Impossible\n";
          return 0;
        }
      }
    }
  }
  for (int i = (0); i < (26); ++i) {
    for (int j = (0); j < (26); ++j) {
      for (int k = (0); k < (26); ++k) {
        adj[i][j] |= adj[i][k] & adj[k][j];
      }
    }
  }
  int f = 0;
  for (int i = (0); i < (26); ++i) {
    if (adj[i][i]) {
      f = 1;
      break;
    }
  }
  if (f) {
    cout << "Impossible\n";
    return 0;
  }
  for (int i = (0); i < (26); ++i) {
    int idx = 0;
    for (int j = (0); j < (26); ++j) {
      bool pos = (!u[j]);
      if (!pos) continue;
      for (int k = (0); k < (26); ++k) {
        if (!u[k] && adj[k][j]) pos = false;
      }
      if (pos) {
        idx = j;
        break;
      }
    }
    u[idx] = 1;
    cout << (char)('a' + idx);
  }
  cout << endl;
  return 0;
}
