#include <bits/stdc++.h>
using namespace std;
void start() {}
vector<int> g[26];
map<long long int, int> vis;
long long int siz = 0, ans = 0;
bool iscycle(int x, int parent = -1) {
  vis[x] = 1;
  for (auto i : g[x]) {
    if (!vis[i]) {
      if (iscycle(i, x)) return 1;
    } else if (vis[i] == 1) {
      return 1;
    }
  }
  vis[x] = 2;
  return 0;
}
vector<long long int> luffy;
void helpertop(int x) {
  vis[x] = 1;
  for (auto i : g[x])
    if (!vis[i]) helpertop(i);
  luffy.push_back(x);
}
void topological() {
  vis.clear();
  for (long long int i = 0; i < 26; i++) {
    if (!vis[i]) helpertop(i);
  }
  reverse(begin(luffy), end(luffy));
}
void sober() {
  long long int n, x = 0, a = 0, b = 0, y = 0, sum = 0, k = 0, m = 0;
  vector<string> v, ace;
  cin >> n;
  for (long long int i = 0; i < n; i++) {
    string s;
    cin >> s;
    v.push_back(s);
  }
  vis.clear();
  for (long long int i = 1; i < n; i++) {
    int j = 0;
    for (j = 0; j < min(v[i].length(), v[i - 1].length()); j++) {
      if (v[i][j] == v[i - 1][j])
        continue;
      else
        break;
    }
    if (j == v[i - 1].length())
      continue;
    else if (j == v[i].length() and v[i].length() < v[i - 1].length()) {
      cout << "Impossible\n";
      return;
    } else if (j < v[i].length() and j < v[i - 1].length()) {
      g[v[i - 1][j] - 'a'].push_back(v[i][j] - 'a');
    }
  }
  for (long long int i = 0; i < 27; i++) {
    if (!vis[i])
      if (iscycle(i)) {
        cout << "Impossible\n";
        return;
      }
  }
  topological();
  if (!luffy.size()) {
    for (long long int i = 0; i < 26; i++) cout << char(i + 'a');
    cout << "\n";
    return;
  }
  for (auto i : luffy) {
    cout << char(i + 'a');
  }
  return;
}
signed main() {
  start();
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    sober();
  }
}
