#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 1 << 30;
const ll LINF = 1LL << 60;
const int mxN = 200;
int n;
string a[mxN];
vector<int> adj[26];
bool vis[26], onstack[26];
vector<char> ans;
bool dfs(int u) {
  vis[u] = true;
  onstack[u] = true;
  for (auto v : adj[u]) {
    if (vis[v] && onstack[v])
      return true;
    else if (!vis[v] && dfs(v))
      return true;
  }
  onstack[u] = false;
  ans.push_back(u + 'a');
  return false;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      bool ok = false;
      for (int k = 0; k < (int)min(a[i].size(), a[j].size()); k++) {
        if (a[i][k] == a[j][k]) continue;
        adj[a[i][k] - 'a'].push_back(a[j][k] - 'a');
        ok = true;
        break;
      }
      if (!ok && a[i].size() > a[j].size()) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
  }
  bool ok = false;
  for (int i = 0; i < 26; i++) {
    if (!vis[i]) ok |= dfs(i);
  }
  if (ok) {
    cout << "Impossible" << endl;
    return 0;
  }
  reverse(ans.begin(), ans.end());
  for (auto i : ans) cout << i;
  cout << endl;
  return 0;
}
