#include <bits/stdc++.h>
using namespace std;
int v(char c) { return c - 97; }
struct Node {
  vector<int> children;
  bool visited = false;
  bool finished = false;
};
bool Visit(int i, Node* abc, stack<int>* out) {
  if (abc[i].finished) return true;
  if (abc[i].visited) return false;
  abc[i].visited = true;
  for (int c : abc[i].children) {
    if (!Visit(c, abc, out)) return 0;
  }
  out->push(i);
  abc[i].finished = true;
  return true;
}
void showstack(stack<int> s) {
  while (!s.empty()) {
    cout << '\t' << s.top();
    s.pop();
  }
  cout << '\n';
}
int main() {
  int namec;
  cin >> namec;
  Node abc[26];
  stack<int> out;
  string lines[namec];
  getline(cin, lines[0]);
  for (int i = 0; i < namec; ++i) {
    getline(cin, lines[i]);
  }
  for (int name = 0; name + 1 < namec; ++name) {
    int i = 0;
    while (i < lines[name].size() && i < lines[name + 1].size()) {
      if (lines[name].size() > lines[name + 1].size() &&
          lines[name].substr(0, lines[name + 1].size()) == lines[name + 1]) {
        cout << "Impossible" << endl;
        return 0;
      }
      if (lines[name][i] != lines[name + 1][i]) {
        abc[v(lines[name][i])].children.push_back(v(lines[name + 1][i]));
        break;
      }
      i++;
    }
  }
  for (int i = 0; i < 26; ++i) {
    if (!Visit(i, abc, &out)) {
      cout << "Impossible" << endl;
      return 0;
    }
  }
  while (!out.empty()) {
    cout << (char)(out.top() + 97);
    out.pop();
  }
  cout << endl;
}
