#include <bits/stdc++.h>
using namespace std;
int N = 26;
vector<vector<int> > g(N, vector<int>(N, 0));
vector<int> v;
queue<int> q;
int cycle = 0;
void dfs(int u) {
  v[u] = 1;
  for (int i = 0; i < N; ++i)
    if (g[u][i]) {
      if (!v[i]) dfs(i);
      if (v[i] == 1) cycle = 1;
    }
  v[u] = 2;
  q.push(u);
}
void browse() {
  v.assign(N, 0);
  for (int i = 0; i < N; ++i)
    if (!v[i]) {
      dfs(i);
    }
}
int main() {
  int n;
  cin >> n;
  vector<string> s(n, "");
  for (int i = 0; i < n; ++i) {
    cin >> s[i];
    if (i == 0) continue;
    string &s0 = s[i - 1], s1 = s[i];
    int j = 0;
    while (s0[j] == s1[j]) {
      ++j;
      if (j >= s0.size()) {
        break;
      }
      if (j >= s1.size()) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
    if (j < s0.size() && j < s1.size())
      g[(int)(s0[j] - 'a')][(int)(s1[j] - 'a')] = 1;
  }
  browse();
  if (cycle) {
    cout << "Impossible" << endl;
    return 0;
  }
  string ans(N, '_');
  for (int i = 0; i < N; ++i) {
    ans[N - 1 - i] = (char)q.front() + 'a';
    q.pop();
  }
  cout << ans << endl;
  return 0;
}
