#include <bits/stdc++.h>
using namespace std;
char s[105][105];
int G[30][30];
int ans_flag = 1;
int ind[30];
int vis[30];
queue<int> que;
void cheak(int x) {
  for (int i = 0; i < 26; i++) {
    if (vis[i] == 1 && G[x][i] == 1) {
      ans_flag = 0;
      break;
    }
    if (G[x][i] == 1) {
      vis[i] = 1;
      cheak(i);
      vis[i] = 0;
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", s[i]);
  }
  fill(G[0], G[0] + 30 * 30, 0);
  for (int i = 0; i < 30; i++) ind[i] = 0;
  for (int i = 1; i < n; i++) {
    int len1 = strlen(s[i - 1]);
    int len2 = strlen(s[i]);
    int flag1 = 0;
    int len = min(len1, len2);
    for (int j = 0; j < len; j++) {
      if (s[i - 1][j] != s[i][j]) {
        if (G[s[i - 1][j] - 'a'][s[i][j] - 'a'] == 0) {
          G[s[i - 1][j] - 'a'][s[i][j] - 'a'] = 1;
          ind[s[i][j] - 'a']++;
        }
        flag1 = 1;
        break;
      }
    }
    if (flag1 == 0 && len1 > len2) {
      ans_flag = 0;
      break;
    }
  }
  if (ans_flag == 1) {
    for (int i = 0; i < 26; i++) {
      fill(vis, vis + 30, 0);
      vis[i] = 1;
      cheak(i);
      vis[i] = 0;
      if (ans_flag == 0) break;
    }
  }
  if (ans_flag == 1) {
    while (!que.empty()) que.pop();
    for (int i = 0; i < 26; i++) {
      if (ind[i] == 0) que.push(i);
    }
  }
  if (ans_flag == 0)
    printf("Impossible\n");
  else {
    while (!que.empty()) {
      int now = que.front();
      printf("%c", now + 'a');
      que.pop();
      for (int i = 0; i < 26; i++) {
        if (G[now][i] == 1) {
          ind[i]--;
          if (ind[i] == 0) que.push(i);
        }
      }
    }
    printf("\n");
  }
}
