#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
vector<int> adj[26];
vector<int> ans;
int visited[26];
int f = 1;
void dfs(int u) {
  visited[u] = 1;
  for (int i = 0; i < adj[u].size(); i++) {
    int v = adj[u][i];
    if (visited[v] == 1) {
      f = 0;
      return;
    } else if (!visited[v]) {
      dfs(v);
    }
  }
  visited[u] = 2;
  ans.push_back(u);
}
int main() {
  int tn = 1;
  while (tn--) {
    int n;
    cin >> n;
    char arr[n + 2][102];
    int parent[26], flag = 0;
    for (int i = 0; i < 26; i++) parent[i] = i;
    for (int i = 0; i < n; i++) cin >> arr[i];
    for (int i = 0; i < n - 1; i++) {
      int l = min(strlen(arr[i]), strlen(arr[i + 1])), c = 0;
      for (int j = 0; j < l; j++) {
        int a = arr[i][j] - 'a', b = arr[i + 1][j] - 'a';
        if (a != b) {
          adj[a].push_back(b);
          c++;
          break;
        }
      }
      if (strlen(arr[i]) > strlen(arr[i + 1]) && !c) flag = 1;
    }
    for (int i = 0; i < 26; i++) {
      if (!visited[i]) dfs(i);
    }
    if (!f || flag) {
      cout << "Impossible\n";
    } else {
      for (int i = ans.size() - 1; i >= 0; i--) cout << (char)(ans[i] + 'a');
      for (int i = 0; i < 26; i++) {
        if (!visited[i]) cout << (char)(i + 'a');
      }
      cout << endl;
    }
  }
  return 0;
}
