#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, -1, 1};
const int N = 101;
vector<long long> g[26];
int n;
char s[N][N];
int len[N];
int grau[26];
int main() {
  queue<int> q;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf(" %s", s[i]);
    len[i] = strlen(s[i]);
  }
  int nok = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      int k = 0;
      while (k < len[i] && k < len[j] && s[i][k] == s[j][k]) k++;
      if (k < len[i] && k < len[j]) {
        int x = s[i][k] - 'a';
        int y = s[j][k] - 'a';
        g[x].push_back(y);
        grau[y]++;
      } else if (k < len[i])
        nok = 1;
    }
  }
  vector<long long> ans;
  if (!nok) {
    for (int i = 0; i < 26; ++i)
      if (grau[i] == 0) q.push(i);
    while (!q.empty()) {
      int x = q.front();
      q.pop();
      ans.push_back(x);
      for (int i = 0; i < g[x].size(); ++i) {
        int y = g[x][i];
        grau[y]--;
        if (grau[y] == 0) q.push(y);
      }
    }
  }
  if (ans.size() != 26)
    printf("Impossible");
  else
    for (int i = 0; i < ans.size(); ++i) printf("%c", (int)ans[i] + 'a');
  printf("\n");
  return 0;
}
