#include <bits/stdc++.h>
const int maxi = 2000000000;
const int maxq = 1000000000;
const double eps = 1e-10;
const double pi = 3.1415926535897932;
const double inf = 1e+18;
const int mo = 1000000007;
const int maxn = 500000;
using namespace std;
int n;
string s[555];
vector<char> v;
int le[555][555], color[5555], kol[5555];
void dfs(char ch) {
  if (color[ch] == 1) {
    puts("Impossible");
    exit(0);
  } else if (color[ch] == 2)
    return;
  color[ch] = 1;
  for (char i = 'a'; i <= 'z'; i++)
    if (le[ch][i]) {
      dfs(i);
    }
  v.push_back(ch);
  color[ch] = 2;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> s[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      bool ok = false;
      for (int k = 0; k < min(s[i].size(), s[j].size()); k++)
        if (s[i][k] != s[j][k]) {
          le[s[i][k]][s[j][k]] = 1;
          kol[s[j][k]]++;
          ok = true;
          break;
        }
      if (ok == false && s[j].size() < s[i].size()) {
        puts("Impossible");
        return 0;
      }
    }
  }
  for (char ch = 'a'; ch <= 'z'; ch++)
    if (color[ch] == 0 && kol[ch] == 0) dfs(ch);
  reverse(v.begin(), v.end());
  if (v.size() < 26) {
    puts("Impossible");
    return 0;
  }
  for (int i = 0; i < v.size(); i++) cout << v[i];
  cout << endl;
  return 0;
}
