#include <bits/stdc++.h>
using namespace std;
inline void inp(int &n) {
  n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  n = n * sign;
}
long long gcd(long long A, long long B) {
  return A > B ? gcd(B, A) : A ? gcd(B % A, A) : B;
}
long long lcm(long long A, long long B) { return A / gcd(A, B) * B; }
long long pow(long long A, long long B, long long P) {
  if (!B) return 1 % P;
  long long h = pow(A, B / 2, P);
  h *= h;
  h %= P;
  if (B % 2) h *= A;
  return h % P;
}
vector<int> z_function(string s) {
  int n = (int)s.length();
  vector<int> z(n);
  for (int i = 1, l = 0, r = 0; i < n; ++i) {
    if (i <= r) z[i] = min(r - i + 1, z[i - l]);
    while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i];
    if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
  }
  return z;
}
int tst;
void get_ready() { tst = 1; }
vector<int> g[56];
string s[250];
int f[29], is[29];
string ans;
int may;
void go(int u) {
  f[u] = 1;
  for (int i = 1; i < g[u].size(); i++)
    if (g[u][i] != g[u][i - 1]) {
      if (f[g[u][i]] == 1)
        may = false;
      else if (f[g[u][i]] == 0)
        go(g[u][i]);
    }
  ans += char(u + 'a');
  f[u] = 2;
}
int n, i, j;
bool READ() {
  cin >> n;
  cin >> s[1];
  may = true;
  for (i = 2; i <= n; i++) {
    cin >> s[i];
    for (j = 0; j < min(s[i - 1].size(), s[i].size()); j++)
      if (s[i - 1][j] != s[i][j]) {
        g[s[i][j] - 'a'].push_back(s[i - 1][j] - 'a');
        is[s[i - 1][j] - 'a']++;
        break;
      }
    if (s[i - 1].size() > s[i].size() &&
        j == min(s[i - 1].size(), s[i].size())) {
      may = false;
    }
  }
  for (i = 0; i <= 'z' - 'a'; i++)
    g[i].push_back(-1), sort(g[i].begin(), g[i].end());
  for (i = 'a' - 'a'; i <= 'z' - 'a'; i++)
    if (!is[i]) {
      go(i);
    }
  if (!may) {
    ans = "Impossible";
  }
  for (i = 0; i <= 'z' - 'a'; i++)
    if (!f[i]) ans = "Impossible";
  cout << ans << endl;
  return 1;
}
bool SOLVE() { return 1; }
bool PRINT() { return 1; }
bool CLEAR() { return 1; }
int main() {
  get_ready();
  while (tst--) {
    if (!READ()) {
      return 0;
    }
    if (!SOLVE()) {
      return 0;
    }
    if (!PRINT()) {
      return 0;
    }
    if (!CLEAR()) {
      return 0;
    }
  }
}
