#include <bits/stdc++.h>
using namespace std;
bool flag = 0;
void dfs(int u, vector<vector<int> > &g, vector<int> &mark, string &order) {
  mark[u] = 1;
  for (auto to : g[u]) {
    if (mark[to] == 1)
      flag = 1;
    else if (mark[to] == 0)
      dfs(to, g, mark, order);
  }
  order.push_back('a' + u);
  mark[u] = 2;
}
int main() {
  ios::sync_with_stdio(0);
  int n;
  cin >> n;
  vector<string> a(n);
  for (int i = 0; i < n; i++) cin >> a[i];
  vector<vector<int> > g(26);
  for (int i = 0; i < n - 1; i++) {
    int size = min((int((a[i]).size())), (int((a[i + 1]).size()))), j;
    for (j = 0; j < size; j++)
      if (a[i][j] != a[i + 1][j]) break;
    if (j < size)
      g[a[i][j] - 'a'].push_back(a[i + 1][j] - 'a');
    else if ((int((a[i]).size())) > (int((a[i + 1]).size())))
      flag = 1;
  }
  vector<int> mark(26);
  string order;
  for (int i = 0; i < 26; i++)
    if (mark[i] == 0) dfs(i, g, mark, order);
  if (flag) {
    cout << "Impossible\n";
  } else {
    reverse(order.begin(), order.end());
    cout << order << '\n';
  }
  return 0;
}
