#include <bits/stdc++.h>
using namespace std;
const int MAX = 305;
vector<int> v[MAX];
int sign[MAX];
int n, m;
int ans[MAX];
int cnt;
char s[200][200];
struct cmp1 {
  bool operator()(int &a, int &b) { return a > b; }
};
int topo() {
  priority_queue<int, vector<int>, cmp1> q;
  int i;
  for (i = 1; i <= 26; i++) {
    if (sign[i] == 0) q.push(i);
  }
  int x;
  while (!q.empty()) {
    x = q.top();
    q.pop();
    ans[cnt++] = x;
    for (i = 0; i < v[x].size(); i++) {
      sign[v[x][i]]--;
      if (sign[v[x][i]] == 0) q.push(v[x][i]);
    }
  }
  for (i = 1; i <= 26; i++) {
    if (sign[i]) return 0;
  }
  return 1;
}
int main() {
  int T, i, j;
  int a, b;
  while (scanf("%d", &n) != EOF) {
    getchar();
    for (i = 0; i < n; i++) {
      gets(s[i]);
    }
    memset(sign, 0, sizeof(sign));
    memset(ans, 0, sizeof(ans));
    for (i = 0; i <= 26; i++) v[i].clear();
    int o = 0;
    for (i = 0; i < n - 1; i++) {
      for (j = 0; j < strlen(s[i]) && j < strlen(s[i + 1]); j++) {
        if (s[i][j] != s[i + 1][j]) {
          v[s[i][j] - 'a' + 1].push_back(s[i + 1][j] - 'a' + 1);
          sign[s[i + 1][j] - 'a' + 1]++;
          break;
        }
      }
      if (j == strlen(s[i + 1])) {
        o = 1;
        break;
      }
    }
    if (o) {
      printf("Impossible\n");
    } else {
      cnt = 1;
      if (topo()) {
        for (i = 1; i <= 26; i++) printf("%c", ans[i] - 1 + 'a');
        printf("\n");
      } else
        printf("Impossible\n");
    }
  }
  return 0;
}
