#include <bits/stdc++.h>
using namespace std;
mt19937 rng((uint64_t)chrono::duration_cast<chrono::nanoseconds>(
                chrono::high_resolution_clock::now().time_since_epoch())
                .count());
inline int rand(int l, int r) {
  uniform_int_distribution<int> RNG(l, r);
  return RNG(rng);
}
const int N = 1e5 + 5;
int indeg[500] = {0};
vector<int> graph[500];
void solve(int casenum) {
  int n;
  cin >> n;
  vector<string> strings(n);
  for (int i = 0; i < n; i++) {
    cin >> strings[i];
  }
  for (int i = 0; i < n - 1; i++) {
    bool equal = 1;
    for (int j = 0; j < min((int)strings[i].size(), (int)strings[i + 1].size());
         j++) {
      if (strings[i][j] == strings[i + 1][j]) continue;
      equal = 0;
      graph[strings[i][j]].push_back(strings[i + 1][j]);
      indeg[strings[i + 1][j]]++;
      break;
    }
    if (equal && (int)strings[i].size() > (int)strings[i + 1].size()) {
      cout << "Impossible" << endl;
      return;
    }
  }
  bool pos = 1;
  string ans;
  queue<int> q;
  for (int i = 'a'; i <= 'z'; i++) {
    if (indeg[i] == 0) q.push(i);
  }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    ans.push_back(u);
    for (int v : graph[u]) {
      if (--indeg[v] == 0) {
        q.push(v);
      }
    }
  }
  if ((int)ans.size() < 26)
    cout << "Impossible" << endl;
  else
    cout << ans << endl;
}
int main() {
  int T = 1;
  for (int i = 1; i <= T; i++) solve(i);
  return 0;
}
