#include <bits/stdc++.h>
using namespace std;
vector<string> srr;
vector<vector<int>> adj(26);
vector<int> order, dfs_num(26, -1);
bool cycle = false;
int get_index(int i) {
  int j = 0;
  while (srr[i][j] == srr[i + 1][j] && srr[i][j] && srr[i + 1][j]) {
    ++j;
  }
  if (!srr[i][j] || !srr[i + 1][j]) {
    return -1;
  }
  return j;
}
void dfs(int i) {
  dfs_num[i] = 0;
  for (int j : adj[i]) {
    if (dfs_num[j] == -1) {
      dfs(j);
    } else if (dfs_num[j] == 0) {
      cycle = true;
    }
  }
  dfs_num[i] = 1;
  order.push_back(i);
}
int main() {
  int n;
  string name;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> name;
    srr.push_back(name);
  }
  for (int i = 0; i < n - 1; ++i) {
    int j = get_index(i);
    if (j != -1) {
      adj[srr[i][j] - 'a'].push_back(srr[i + 1][j] - 'a');
    } else {
      if (srr[i].length() >= srr[i + 1].length()) {
        cycle = true;
      }
    }
  }
  for (int i = 0; i < 26; ++i) {
    if (dfs_num[i] == -1) {
      dfs(i);
    }
  }
  if (cycle) {
    cout << "Impossible";
  } else {
    reverse(order.begin(), order.end());
    for (int i : order) {
      cout << (char)(i + 'a');
    }
  }
}
