#include <bits/stdc++.h>
using namespace std;
bool g[30][30];
int n;
string a[105], b[105];
void comp(string a, string b) {
  for (int i = 0; i < min((int)((a).size()), (int)((b).size())); i++) {
    if (a[i] != b[i]) {
      g[a[i] - 'a'][b[i] - 'a'] = 1;
      return;
    }
  }
  if ((int)((a).size()) > (int)((b).size())) {
    cout << "Impossible";
    exit(0);
  }
}
int u[30];
vector<char> ans;
char to[30];
void dfs(int v) {
  u[v] = 1;
  for (int to = 0; to < 26; to++) {
    if (!g[v][to]) continue;
    if (u[to] == 1) {
      cout << "Impossible";
      exit(0);
    }
    if (u[to] == 0) dfs(to);
  }
  u[v] = 2;
  ans.push_back(char(v + 'a'));
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) comp(a[i], a[j]);
  for (int i = 0; i < 26; i++)
    if (u[i] == 0) dfs(i);
  if ((int)((ans).size()) != 26) {
    cout << "Impossible";
    return 0;
  }
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < 26; i++) to[ans[i] - 'a'] = char('a' + i);
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < (int)((a[i]).size()); j++) {
      a[i][j] = to[a[i][j] - 'a'];
    }
    b[i] = a[i];
  }
  sort(b + 1, b + n + 1);
  for (int i = 1; i <= n; i++)
    if (a[i] != b[i]) {
      cout << "Impossible";
      return 0;
    }
  for (int i = 0; i < 26; i++) cout << ans[i];
  return 0;
}
