#include <bits/stdc++.h>
using namespace std;
const int N = 111;
int n;
char st[N][N];
string al[N];
unordered_map<char, vector<char> > ad;
unordered_map<char, int> deg;
vector<int> topo;
void bfs() {
  queue<char> q;
  for (char ch = 'a'; ch <= 'z'; ch++) {
    if (!deg[ch]) q.push(ch);
  }
  while (((int)(q).size())) {
    int u = q.front();
    q.pop();
    topo.push_back(u - '0');
    for (auto x : ad[u]) {
      deg[x]--;
      if (!deg[x]) q.push(x);
    }
  }
}
int main(void) {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", st + i);
    al[i] = st[i];
  }
  int f = 0;
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < min(((int)(al[i]).size()), ((int)(al[i + 1]).size()));
         j++) {
      if (al[i][j] != al[i + 1][j]) {
        ad[al[i][j]].push_back(al[i + 1][j]);
        deg[al[i + 1][j]]++;
        f = 1;
        break;
      }
    }
    if (!f && ((int)(al[i + 1]).size()) < ((int)(al[i]).size())) {
      puts("Impossible");
      return 0;
    }
  }
  bfs();
  if (((int)(topo).size()) != 26)
    puts("Impossible");
  else
    for_each((topo).begin(), (topo).end(), [&](int c) { putchar(c + '0'); });
  return 0;
}
