#include <bits/stdc++.h>
using namespace std;
string data[105];
vector<int> adj[105];
vector<char> res;
map<pair<int, int>, bool> mp;
int ind[105];
bool vis[105];
void dfs(int n) {
  vis[n] = true;
  for (int i = 0; i < adj[n].size(); i++) {
    int v = adj[n][i];
    if (!vis[v]) dfs(v);
  }
  char s = (char)(n + 'a');
  res.push_back(s);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    cin >> data[i];
  }
  for (int i = 0; i < n - 1; i++) {
    int indx = min(data[i].size(), data[i + 1].size());
    bool mark = false;
    for (int j = 0; j < indx; j++) {
      int s1 = (int)(data[i][j] - 'a');
      int s2 = (int)(data[i + 1][j] - 'a');
      if (s1 != s2) {
        mark = true;
        if (mp[{s1, s2}] == false) {
          mp[{s1, s2}] = true;
          ind[s2]++;
          adj[s1].push_back(s2);
        }
        break;
      }
    }
    if (!mark) {
      if (data[i].size() > data[i + 1].size()) {
        cout << "Impossible\n";
        return 0;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    if (ind[i] == 0) {
      dfs(i);
    }
  }
  if (res.size() != 26) {
    cout << "Impossible\n";
    return 0;
  }
  for (int i = res.size() - 1; i >= 0; i--) cout << res[i];
  printf("\n");
  return 0;
}
