#include <bits/stdc++.h>
using namespace std;
vector<int> status(26);
vector<vector<int> > adjList(200000);
vector<string> names(100);
vector<int> ts;
vector<int> processing(26);
void dfs(int u, bool &valid) {
  status[u] = 1;
  processing[u] = true;
  for (int j = 0; j < adjList[u].size(); j++) {
    int v = adjList[u][j];
    if (processing[v] == true) {
      valid = false;
      return;
    }
    if (status[v] == 0) {
      dfs(v, valid);
    }
  }
  processing[u] = false;
  ts.push_back(u);
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> names[i];
  }
  for (int i = 0; i < 26; i++) {
    status[i] = 0;
    processing[i] = false;
  }
  for (int i = 0; i < n - 1; i++) {
    int c1 = -1;
    int c2 = -1;
    for (int j = 0; j < names[i].size() && j < names[i + 1].size(); j++) {
      if (names[i][j] != names[i + 1][j]) {
        c1 = names[i][j];
        c2 = names[i + 1][j];
        adjList[(c1 - 'a')].push_back(c2 - 'a');
        break;
      }
    }
    if (c1 == -1 && c2 == -1 && names[i].size() > names[i + 1].size()) {
      cout << "Impossible" << endl;
      return 0;
    }
  }
  for (int i = 0; i < 26; i++) {
    if (status[i] == 0) {
      bool valid = true;
      dfs(i, valid);
      if (!valid) {
        cout << "Impossible" << endl;
        return 0;
      }
    }
  }
  for (int i = ts.size() - 1; i >= 0; i--) {
    cout << (char)('a' + ts[i]);
  }
  cout << endl;
  return 0;
}
