#include <bits/stdc++.h>
using namespace std;
vector<char> v[26];
int vis[26];
int book[26], vix[26][26];
bool dfs(int p) {
  if (book[p]) return false;
  book[p] = 1;
  for (int i = 0; i < v[p].size(); i++) {
    if (v[v[p][i] - 'a'].size() && !dfs(v[p][i] - 'a')) return false;
  }
  book[p] = 0;
  return true;
}
int main() {
  int n;
  scanf("%d", &n);
  string str[105];
  for (int i = 0; i < n; i++) cin >> str[i];
  for (int i = 1; i < n; i++) {
    if (str[i][0] == str[i - 1][0]) {
      int k = 0, len = min(str[i].length(), str[i - 1].length());
      while (str[i][k] == str[i - 1][k] && k < len) k++;
      if (k < len) {
        int p = str[i - 1][k] - 'a', pr = str[i][k] - 'a';
        if (!vix[p][pr]) {
          vix[p][pr] = 1;
          v[p].push_back(pr + 'a');
          vis[pr]++;
        }
      } else {
        if (str[i - 1].length() > str[i].length()) {
          printf("Impossible\n");
          return 0;
        }
      }
    } else {
      int p = str[i - 1][0] - 'a', pr = str[i][0] - 'a';
      if (!vix[p][pr]) {
        vix[p][pr] = 1;
        v[str[i - 1][0] - 'a'].push_back(str[i][0]);
        vis[str[i][0] - 'a']++;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    memset(book, 0, sizeof(book));
    if (v[i].size() && !dfs(i)) {
      printf("Impossible\n");
      return 0;
    }
  }
  memset(book, 0, sizeof(book));
  int cnt = 0;
  while (cnt < 26) {
    for (int i = 0; i < 26; i++) {
      if (!book[i] && !vis[i]) {
        book[i]++;
        cnt++;
        printf("%c", i + 'a');
        for (int j = 0; j < v[i].size(); j++) vis[v[i][j] - 'a']--;
      }
    }
  }
}
