#include <bits/stdc++.h>
using namespace std;
set<char> g[127 + 10];
int d[127 + 10][127 + 10];
int vis[127 + 10];
string res;
int ii;
void impossible(string s) {
  cout << "Impossible\n";
  exit(0);
}
void topSort(char u) {
  if (vis[u] == 1) return;
  if (vis[u] == -1) impossible("Cycle found at " + string(1, u));
  vis[u] = -1;
  for (char v : g[u]) topSort(v);
  vis[u] = 1;
  res = string(1, u) + res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<string> s(n);
  for (auto& it : s) cin >> it;
  for (int i = 0; (i + 1) < n; i++) {
    bool nequ = false;
    int j;
    for (j = 0; j < min(s[i].size(), s[i + 1].size()); j++) {
      if (s[i][j] != s[i + 1][j]) {
        g[s[i][j]].insert(s[i + 1][j]);
        break;
      }
    }
    if (j != min(s[i].size(), s[i + 1].size())) continue;
    if (s[i].size() < s[i + 1].size()) continue;
    if (s[i].size() > s[i + 1].size())
      impossible("Culprit: " + s[i] + " and " + s[i + 1]);
  }
  res = "";
  for (char i = 'a'; i <= 'z'; i++) topSort(i);
  cout << res << "\n";
}
