#include <bits/stdc++.h>
using namespace std;
int N;
string names[111];
int cmp[111][111];
bool done[111];
queue<int> q;
void add_to_queue() {
  for (int i = 0; i < (26); i++)
    if (!done[i]) {
      bool ok = true;
      for (int j = 0; j < (26); j++)
        if (!done[j] && cmp[j][i] == 1) {
          ok = false;
          break;
        }
      if (ok) {
        done[i] = true;
        q.push(i);
      }
    }
}
bool solve(int l, int r, int pos) {
  if (l == r) return true;
  while (l < r && names[l].size() == pos) l++;
  int start = l;
  for (int i = (l + 1); i <= (r - 1); i++) {
    if (names[i].size() <= pos) return false;
    if (names[start][pos] != names[i][pos]) {
      char a = names[start][pos] - 'a', b = names[i][pos] - 'a';
      if (cmp[a][b] == -1) return false;
      cmp[a][b] = 1;
      cmp[b][a] = -1;
      if (!solve(start, i, pos + 1)) return false;
      start = i;
    }
  }
  return solve(start, r, pos + 1);
}
int main(int argc, char *argv[]) {
  scanf("%d", &N);
  for (int i = 0; i < (N); i++) cin >> names[i];
  if (!solve(0, N, 0))
    printf("Impossible\n");
  else {
    add_to_queue();
    string ans = "";
    while (!q.empty()) {
      ans.push_back(q.front() + 'a');
      q.pop();
      add_to_queue();
    }
    if (ans.size() == 26)
      cout << ans << endl;
    else
      printf("Impossible\n");
  }
  return 0;
}
