#include <bits/stdc++.h>
using namespace std;
const int maxN = 105;
int n;
string s[maxN];
int l[maxN];
bool c[40][40];
int deg[40];
vector<int> res;
bool visited[40];
bool nosol = false;
void add(char c1, char c2) { c[c1 - 'a'][c2 - 'a'] = true; }
void dfs(int u) {
  visited[u] = true;
  for (int v = 0; v < 40; v++)
    if (c[u][v] && !visited[v]) dfs(v);
  res.push_back(u);
}
int main() {
  bool found = false;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    l[i] = s[i].length();
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      found = false;
      for (int k = 0; k < min(l[i], l[j]); k++) {
        if (s[i][k] != s[j][k]) {
          add(s[i][k], s[j][k]);
          found = true;
          break;
        }
      }
      if (!found && l[i] > l[j]) {
        nosol = true;
      }
    }
  }
  for (int i = 0; i < 40; i++)
    if (!visited[i]) {
      dfs(i);
    }
  for (int i = 0; i < 26; i++)
    for (int j = i + 1; j < 26; j++)
      if (c[res[i]][res[j]]) {
        nosol = true;
        break;
      }
  if (nosol) {
    cout << "Impossible" << endl;
  } else {
    for (int i = 25; i >= 0; i--) cout << char('a' + res[i]);
    cout << endl;
  }
  return 0;
}
