#include <bits/stdc++.h>
using namespace std;
int cycle;
vector<int> adj[26], topo;
int color[26];
void dfs(int i) {
  color[i] = 1;
  for (auto nx : adj[i])
    if (!color[nx])
      dfs(nx);
    else if (color[nx] == 1)
      cycle = 1;
  topo.push_back(i);
  color[i] = 2;
}
int main() {
  int n;
  scanf("%d", &n);
  string a[110];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  if (n == 1) {
    for (char c = 'a'; c <= 'z'; c++) {
      cout << c;
    }
    return 0;
  }
  for (int i = 1; i < n; i++) {
    int flag = 0;
    for (int j = 0; j < (int)min(a[i - 1].size(), a[i].size()); j++) {
      if (a[i - 1][j] != a[i][j]) {
        adj[a[i - 1][j] - 'a'].push_back(a[i][j] - 'a');
        flag = 1;
        break;
      }
    }
    if (!flag && a[i - 1].size() > a[i].size()) {
      puts("Impossible");
      return 0;
    }
  }
  for (int i = 0; i < 26; i++) {
    if (!color[i]) dfs(i);
  }
  if (cycle) {
    puts("Impossible");
    return 0;
  }
  reverse(topo.begin(), topo.end());
  for (auto x : topo) cout << char(x + 'a');
  return 0;
}
