#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> A(26);
void khan(vector<int> &ans) {
  queue<int> q;
  vector<int> ind(26, 0);
  for (int i = 0; i < A.size(); i++)
    for (int x : A[i]) ind[x]++;
  for (int i = 0; i < 26; i++)
    if (ind[i] == 0) q.push(i);
  while (!q.empty()) {
    int cur = q.front();
    ans.push_back(cur);
    q.pop();
    for (int x : A[cur])
      if (--ind[x] == 0) q.push(x);
  }
}
int main() {
  int n;
  cin >> n;
  vector<string> ss(n);
  for (int i = 0; i < n; i++) {
    cin >> ss[i];
  }
  for (int k = 0; k < ss.size() - 1; k++) {
    string prev = ss[k];
    string cur = ss[k + 1];
    int i = 0, j = 0;
    while (i < prev.size() and j < cur.size() and prev[i] == cur[j]) {
      i++, j++;
    }
    if (i < prev.size() and j < cur.size())
      A[prev[i] - 'a'].push_back(cur[j] - 'a');
    else if (i != prev.size() and j == cur.size()) {
      cout << "Impossible\n";
      exit(0);
    }
    prev = cur;
  }
  vector<int> ans;
  khan(ans);
  if (ans.size() != 26) {
    cout << "Impossible\n";
    exit(0);
  }
  for (int x : ans) cout << char(x + 'a');
}
