#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
vector<long long> v1[26], vis(26, 0);
string ss = "";
void dfs(long long node, long long p) {
  vis[node] = 1;
  for (auto x1 : v1[node]) {
    if (vis[x1] == 0) {
      dfs(x1, node);
    } else if (vis[x1] == 1) {
      cout << "Impossible";
      exit(0);
    }
  }
  ss += ('a' + node);
  vis[node] = 2;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, i;
  cin >> n;
  vector<string> v(n);
  for (i = 0; i < n; i++) {
    cin >> v[i];
  }
  for (i = 0; i < n - 1; i++) {
    long long l1 = v[i].length();
    long long l2 = v[i + 1].length();
    long long c = 0;
    while (v[i][c] == v[i + 1][c] && c < min(l1, l2)) c++;
    if (c == min(l1, l2)) {
      if (l1 > l2) {
        cout << "Impossible";
        return 0;
      }
    } else {
      v1[v[i][c] - 'a'].push_back(v[i + 1][c] - 'a');
    }
  }
  for (i = 0; i < 26; i++) {
    if (vis[i] == 0) dfs(i, -1);
  }
  reverse(ss.begin(), ss.end());
  cout << ss;
}
