#include <bits/stdc++.h>
using namespace std;
int n;
vector<string> sl;
map<int, set<int>> bef, aft;
bool comp(const string &s1, const string &s2) {
  int len = min(s1.length(), s2.length());
  for (int i = 0; i < len; i++)
    if (s1[i] != s2[i]) {
      bef[s2[i] - 'a'].insert(s1[i] - 'a');
      aft[s1[i] - 'a'].insert(s2[i] - 'a');
      return true;
    }
  return s1.length() <= s2.length();
}
int main() {
  for (int i = 0; i < 26; i++) bef[i] = aft[i] = {};
  cin >> n;
  sl.resize(n);
  for (int i = 0; i < n; i++) cin >> sl[i];
  for (int i = 0; i < n - 1; i++)
    for (int j = i + 1; j < n; j++)
      if (!comp(sl[i], sl[j])) {
        cout << "Impossible";
        return 0;
      }
  string val;
  while (!bef.empty()) {
    bool found = false;
    for (auto &p : bef)
      if (p.second.empty()) {
        val += p.first + 'a';
        bef.erase(p.first);
        for (auto a : aft[p.first]) bef[a].erase(p.first);
        found = true;
        break;
      }
    if (!found) {
      val = "Impossible";
      break;
    }
  }
  cout << val;
}
