50 50 50 50
 49 49 4 1
 48 50 12 11
 5 7 1 10
 1 50 50 50
 5 7 1 4
 32 4 17 3
 1 50 1 50
 50 1 1 1
 32 31 10 9
 5 7 4 1
 49 49 3 3
 50 49 1 2
 50 48 3 1
 50 1 1 50
 5 7 10 10
 1 1 1 1
 49 50 11 12

Second
 Second
 Second
 Second
 Second
 Second
 First
 Second
 First
 First
 Second
 Second
 First
 First
 First
 Second
 Second
 Second

#include <bits/stdc++.h>
using namespace std;
const char lend = '\n';
const int N = 100;
int mat[26][26], n, bad;
string vet[N];
bool cmp(char a, char b) { return mat[a - 'a'][b - 'a'] < 0; }
void solve(string& a, string& b) {
  int g = 0;
  for (size_t i = 0; i < a.size() && i < b.size(); ++i)
    if (a[i] != b[i]) {
      int x = a[i] - 'a';
      int y = b[i] - 'a';
      if (mat[x][y] == 0) mat[x][y] = -1;
      if (mat[y][x] == 0) mat[y][x] = 1;
      if (mat[x][y] != -1 || mat[y][x] != 1) bad = 1;
      g = 1;
      break;
    }
  if (!g && a > b) bad = 1;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> vet[i];
  for (int i = 0; i < n; ++i)
    for (int j = i + 1; j < n; ++j) solve(vet[i], vet[j]);
  if (bad)
    cout << "Impossible\n";
  else {
    bool out[26] = {};
    string build;
    for (int k = 0; k < 26; ++k) {
      for (int i = 0; i < 26; ++i)
        if (!out[i]) {
          int g = 1;
          for (int j = 0; j < 26 && g; ++j)
            if (!out[j]) g &= mat[i][j] <= 0;
          if (g) {
            build += (char)(i + 'a');
            out[i] = 1;
            break;
          }
        }
    }
    if (build.size() != 26)
      cout << "Impossible\n";
    else
      cout << build << endl;
  }
}
