#include <bits/stdc++.h>
using namespace std;
int graph[50][50];
char a[150][150];
int r[30];
int rem[30];
void dfs(int i) {
  r[i] = 1;
  for (int j = 1; j <= 26; j++) {
    if (graph[i][j] == 1) {
      if (r[j] != 1) {
        dfs(j);
        r[j] = 0;
      } else {
        cout << "Impossible";
        exit(0);
      }
    }
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 2; i <= n; i++) {
    int j;
    for (j = 0; a[i][j] != '\0' && a[i - 1][j] != '\0'; j++)
      if (a[i][j] != a[i - 1][j]) {
        int node1 = a[i - 1][j] - 'a' + 1;
        int node2 = a[i][j] - 'a' + 1;
        graph[node1][node2] = 1;
        break;
      }
    if (a[i][j] == '\0' && a[i - 1][j] != '\0') {
      cout << "Impossible";
      return 0;
    }
  }
  for (int i = 1; i <= 26; i++) {
    dfs(i);
    r[i] = 0;
  }
  while (1) {
    int st = 0;
    for (int i = 1; i <= 26; i++) {
      int state = 0;
      for (int j = 1; j <= 26; j++)
        if (graph[j][i] == 1) {
          state = 1;
          break;
        }
      if (state == 0) {
        if (rem[i] == 0) {
          cout << (char)(i + 'a' - 1);
          for (int j = 1; j <= 26; j++) graph[i][j] = 0;
          rem[i] = 1;
        }
      }
    }
    for (int i = 1; i <= 26; i++)
      if (rem[i] == 0) {
        st = 1;
        break;
      }
    if (st == 0) break;
  }
  return 0;
}
