#include <bits/stdc++.h>
using namespace std;
string s[150];
vector<int> g[150], top;
bool use[150], vis[150];
int n;
void f(int x) {
  for (int i = 0; i < s[x].size() && i < s[x + 1].size(); i++)
    if (s[x][i] != s[x + 1][i]) {
      g[s[x + 1][i] - 'a'].push_back(s[x][i] - 'a');
      return;
    }
  if (s[x].size() > s[x + 1].size()) {
    cout << "Impossible" << endl;
    exit(0);
  }
}
void dfs(int v) {
  vis[v] = use[v] = true;
  for (int i = 0; i < g[v].size(); i++)
    if (use[g[v][i]]) {
      cout << "Impossible" << endl;
      exit(0);
    } else if (!vis[g[v][i]])
      dfs(g[v][i]);
  use[v] = false;
  top.push_back(v);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < n - 1; i++) f(i);
  for (int i = 0; i < 26; i++)
    if (!vis[i]) dfs(i);
  for (int i = 0; i < 26; i++) putchar(top[i] + 'a');
  cout << endl;
  cout << endl;
}
