#include <bits/stdc++.h>
using namespace std;
const int MAX = 26;
int n;
char tmp;
bool avail[MAX], Free[MAX], check, deg[MAX];
string data[100], res;
vector<char> adj[MAX];
void dfs(int u) {
  if (check) return;
  avail[u] = true;
  for (int i = 0; i < adj[u].size(); ++i)
    if (check)
      return;
    else if (!Free[adj[u][i]])
      if (avail[adj[u][i]]) {
        check = true;
        return;
      } else
        dfs(adj[u][i]);
  res = char(u + 'a') + res;
  Free[u] = true;
  avail[u] = false;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> data[i];
  for (int i = 0; i < n - 1; ++i)
    for (int j = i + 1; j < n; ++j) {
      int k = 0;
      int len = min(data[i].size(), data[j].size());
      while (k < len && data[i][k] == data[j][k]) ++k;
      if (k < len) {
        adj[data[i][k] - 'a'].push_back(data[j][k] - 'a');
        ++deg[data[j][k] - 'a'];
      } else if (data[i].size() > data[j].size()) {
        cout << "Impossible";
        return 0;
      }
    }
  for (int i = 0; i < MAX; ++i)
    if (!deg[i] && !Free[i]) dfs(i);
  if (check || res.size() < 26)
    cout << "Impossible";
  else
    cout << res;
  return 0;
}
