#include <bits/stdc++.h>
using namespace std;
const int MAX = 105;
vector<int> adj[MAX];
string s[MAX];
int mark[MAX];
bool cycle;
string ans = "";
void dfs(int v) {
  mark[v] = 1;
  for (int i = 0; i < adj[v].size(); i++) {
    int u = adj[v][i];
    if (mark[u] == 1) cycle = true;
    if (!mark[u]) dfs(u);
  }
  mark[v] = 2;
}
void print(int v) {
  mark[v] = 1;
  for (int i = 0; i < adj[v].size(); i++) {
    int u = adj[v][i];
    if (!mark[u]) print(u);
  }
  ans += 'a' + v;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < n - 1; i++) {
    int j = 0;
    while (j < s[i].size() && j < s[i + 1].size() && s[i][j] == s[i + 1][j])
      j++;
    if (j == s[i + 1].size() && s[i].size() > s[i + 1].size()) {
      cout << "Impossible" << endl;
      return 0;
    }
    if (j < s[i].size() && j < s[i + 1].size())
      adj[s[i][j] - 'a'].push_back(s[i + 1][j] - 'a');
  }
  for (int i = 0; i < 26; i++)
    if (!mark[i]) dfs(i);
  if (cycle) {
    cout << "Impossible" << endl;
    return 0;
  }
  memset(mark, 0, sizeof(mark));
  for (int i = 0; i < 26; i++)
    if (!mark[i]) print(i);
  reverse(ans.begin(), ans.end());
  cout << ans << endl;
  return 0;
}
