#include <bits/stdc++.h>
using namespace std;
vector<int> a[26];
int vis[26] = {0};
bool sea(int i, int x) {
  for (int j = 0; j < a[i].size(); j++) {
    if (a[i][j] == x) return true;
  }
  return false;
}
void dfs(int ver, stack<int>& s) {
  vis[ver] = 1;
  for (int i = 0; i < a[ver].size(); i++) {
    if (vis[a[ver][i]] == 0) dfs(a[ver][i], s);
  }
  s.push(ver);
}
int main() {
  long long int n;
  cin >> n;
  vector<string> v;
  for (int i = 0; i < n; i++) {
    string p;
    cin >> p;
    v.push_back(p);
  }
  for (int i = 0; i < n - 1; i++) {
    string p = v[i], q = v[i + 1];
    int f = 0;
    long long int l1 = p.length();
    long long int l2 = q.length();
    long long int j = 0, k = 0;
    while (j < l1 && k < l2) {
      if (p[j] != q[k]) {
        f = 1;
        break;
      }
      j++;
      k++;
    }
    if (f == 0 && l1 > l2) {
      cout << "Impossible";
      return 0;
    }
    if (f == 0) continue;
    a[p[j] - 'a'].push_back(q[k] - 'a');
  }
  stack<int> s;
  for (int i = 0; i < 26; i++) {
    if (vis[i] == 0) dfs(i, s);
  }
  map<int, int> m;
  int ind = 0;
  while (!s.empty()) {
    m[s.top()] = ind;
    ind++;
    s.pop();
  }
  for (int i = 0; i < n - 1; i++) {
    string p = v[i], q = v[i + 1];
    int f = 0;
    long long int l1 = p.length();
    long long int l2 = q.length();
    long long int j = 0, k = 0;
    while (j < l1 && k < l2) {
      if (p[j] != q[k]) {
        f = 1;
        break;
      }
      j++;
      k++;
    }
    if (f) {
      if (m[p[j] - 'a'] > m[q[k] - 'a']) {
        cout << "Impossible";
        return 0;
      }
    }
  }
  for (int i = 0; i < 26; i++) vis[i] = 0;
  for (int i = 0; i < 26; i++) {
    if (vis[i] == 0) dfs(i, s);
  }
  while (!s.empty()) {
    cout << char(s.top() + 'a');
    s.pop();
  }
  return 0;
}
