#include <bits/stdc++.h>
using namespace std;
map<char, bool> appear;
map<char, vector<char> > graph;
map<char, bool> vis;
map<char, bool> in;
vector<char> sol;
bool ok = false;
void dfs(char c) {
  vis[c] = true;
  in[c] = true;
  for (int i = 0; i < graph[c].size(); i++) {
    if (in[graph[c][i]]) ok = true;
    if (!vis[graph[c][i]]) {
      dfs(graph[c][i]);
    }
  }
  in[c] = false;
  sol.push_back(c);
}
int main() {
  string s;
  int n;
  scanf("%i", &n);
  vector<string> v;
  while (cin >> s && n--) v.push_back(s);
  for (int i = 0; i + 1 < v.size(); i++) {
    for (int j = 0; j < v[i].length() && j < v[i + 1].length(); j++)
      if (v[i][j] != v[i + 1][j]) {
        graph[v[i][j]].push_back(v[i + 1][j]);
        break;
      } else if (j == v[i + 1].length() - 1 &&
                 v[i].length() > v[i + 1].length())
        ok = true;
  }
  for (char i = 'a'; i <= 'z'; i++)
    if (!vis[i]) dfs(i);
  reverse(sol.begin(), sol.end());
  if (ok)
    printf("Impossible");
  else
    for (int i = 0; i < sol.size(); i++) {
      printf("%c", sol[i]);
    }
  putchar('\n');
}
