#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
int check = 0;
void check_cycle(map<char, set<char>> &chil, int u, int vis[]) {
  vis[u] = 1;
  for (auto ch : chil[u + 'a']) {
    int v = ch - 'a';
    if (!vis[v])
      check_cycle(chil, v, vis);
    else {
      check = 1;
      break;
    }
    if (check) break;
  }
  if (check) return;
  vis[u] = 0;
}
void topologicalSortUtil(int v, bool visited[], stack<int> &Stack,
                         map<char, vector<char>> &children) {
  visited[v] = true;
  for (auto e : children[v + 'a']) {
    if (!visited[e - 'a'])
      topologicalSortUtil(e - 'a', visited, Stack, children);
  }
  Stack.push(v);
}
void topologicalSort(map<char, vector<char>> &children) {
  stack<int> Stack;
  bool visited[26] = {0};
  for (int i = 0; i < 26; i++) {
    if (visited[i] == 0) topologicalSortUtil(i, visited, Stack, children);
  }
  while (!Stack.empty()) {
    cout << (char)('a' + Stack.top());
    Stack.pop();
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  string names[n];
  for (int i = 0; i < n; i++) cin >> names[i];
  map<char, set<char>> parents;
  map<char, vector<char>> children;
  map<char, set<char>> chil;
  for (int i = 0; i < n; i++) {
    map<string, int> mp;
    for (int j = i + 1; j < n; j++) {
      int x = 0, y = 0;
      string a = names[i], b = names[j];
      mp[a] = 1;
      if (a.length() > b.length() && a.substr(0, b.length()) == b) {
        cout << "Impossible\n";
        exit(0);
      }
      if (mp[b] == 1 && b != names[j - 1]) {
        cout << "Impossible\n";
        exit(0);
      }
      mp[b] = 1;
      if (a == b || (a.length() <= b.length() && b.substr(0, a.length()) == a))
        continue;
      while (a[x] == b[y]) x++, y++;
      parents[b[y]].insert(a[x]);
      children[a[x]].push_back(b[y]);
      chil[a[x]].insert(b[y]);
    }
  }
  check = 0;
  int vis[26] = {0};
  for (int i = 0; i < 26; i++) {
    if (!vis[i]) check_cycle(chil, i, vis);
  }
  if (check) {
    cout << "Impossible\n";
    exit(0);
  }
  topologicalSort(children);
}
