#include <bits/stdc++.h>
using namespace std;
int n, adj[166][166];
bool h[166];
vector<char> V[166], r;
string a[105];
void dfs(char x) {
  h[x] = true;
  for (typeof(V[x].begin()) it = V[x].begin(); it != V[x].end(); it++)
    if (!h[*it]) dfs(*it);
  r.push_back(x);
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n - 1; i++) {
    int q = 0;
    while (a[i][q] == a[i + 1][q]) q++;
    if (q >= a[i + 1].size() and q < a[i].size())
      return puts("Impossible") && 0;
    else if (q >= a[i].size())
      continue;
    adj[a[i + 1][q]][a[i][q]] = 1;
    for (typeof(V[a[i][q]].begin()) it = V[a[i][q]].begin();
         it != V[a[i][q]].end(); it++)
      adj[a[i + 1][q]][*it] = 1;
    V[a[i + 1][q]].push_back(a[i][q]);
  }
  for (int i = 'a'; i <= 'z'; i++)
    if (!h[i]) dfs(i);
  for (int i = 0; i <= r.size() - 1; i++)
    for (int j = 0; j <= i; j++)
      if (adj[r[j]][r[i]]) return puts("Impossible") && 0;
  for (typeof(r.begin()) it = r.begin(); it != r.end(); it++) cout << *it;
  cout << endl;
  return 0;
}
