#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  string word1, word2;
  vector<vector<int> > adj(26);
  vector<bool> found(26, false);
  cin >> n >> word1;
  for (int i = 0; i < word1.size(); i++) found[word1[i] - 97] = true;
  for (int i = 1; i < n; i++) {
    cin >> word2;
    int idx = 0;
    while (word1[idx] == word2[idx]) {
      idx++;
      if (word1.length() == idx) break;
      if (word2.length() == idx) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
    if (word1.length() > idx) {
      adj[word1[idx] - 97].push_back(word2[idx] - 97);
    }
    word1 = word2;
    for (int i = 0; i < word1.size(); i++) found[word1[i] - 97] = true;
  }
  vector<int> incoming(26, 0);
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < adj[i].size(); j++) {
      incoming[adj[i][j]]++;
    }
  }
  deque<int> q;
  for (int i = 0; i < 26; i++) {
    if (incoming[i] == 0) q.push_back(i);
  }
  vector<int> order;
  while (!q.empty()) {
    int current = q.front();
    order.push_back(current);
    q.pop_front();
    for (int i = 0; i < adj[current].size(); i++) {
      incoming[adj[current][i]]--;
      if (incoming[adj[current][i]] == 0) {
        q.push_back(adj[current][i]);
      }
    }
  }
  if (order.size() < 26) {
    cout << "Impossible" << endl;
    return 0;
  }
  for (int c : order) cout << (char)(c + 97);
  cout << endl;
  return 0;
}
