#include <bits/stdc++.h>
using namespace std;
int stck[100000], top = 0, n, mat[26][26], color[26], flag = 0;
void push(int a) { stck[++top] = a; }
int pop() { return stck[top--]; }
int minimum(int a, int b) { return (a < b) ? a : b; }
void dfs(int u, int parent) {
  int v;
  if (color[u] == 0) {
    color[u] = 1;
    for (v = 0; v < 26; v++) {
      if (mat[u][v] == 1 && color[v] == 0) {
        dfs(v, u);
      } else if (color[v] == 1 && mat[u][v] == 1 && v != parent) {
        flag = 1;
        return;
      }
    }
    color[u] = 2;
    push(u);
  }
}
int main() {
  cin >> n;
  int i, len1, len2, j, min;
  char arr[n][102];
  for (i = 0; i < n; i++) cin >> arr[i];
  for (i = 0; i < n - 1; i++) {
    len2 = strlen(arr[i + 1]);
    len1 = strlen(arr[i]);
    min = minimum(len1, len2);
    for (j = 0; j < min; j++) {
      if (arr[i][j] != arr[i + 1][j]) {
        if (mat[(int)arr[i + 1][j] % 97][(int)arr[i][j] % 97] != 1) {
          mat[(int)arr[i][j] % 97][(int)arr[i + 1][j] % 97] = 1;
          break;
        } else {
          flag = 1;
          break;
        }
      }
    }
    if (j == min) {
      if (len2 == min && len1 > len2) flag = 1;
    }
    if (flag == 1) break;
  }
  if (flag == 0) {
    for (i = 25; i >= 0; i--) {
      if (color[i] == 0) dfs(i, -1);
    }
  }
  if (flag == 0) {
    for (i = top; i > 0; i--) cout << (char)(stck[i] + 97);
    cout << endl;
  } else
    cout << "Impossible" << endl;
  return 0;
}
