#include <bits/stdc++.h>
using namespace std;
bool abc[300];
string a[105];
int dfs_num[300], dfs_parent[300];
vector<vector<int> > graph;
bool cicle = false;
vector<int> ts;
void dfs2(int u) {
  dfs_num[u] = 1;
  for (int j = 0; j < graph[u].size(); j++) {
    int v = graph[u][j];
    if (dfs_num[v] == 0) {
      dfs2(v);
    }
  }
  abc[u] = 1;
  ts.push_back(u);
}
void graphCheck(int u) {
  dfs_num[u] = 1;
  for (int j = 0; j < graph[u].size(); j++) {
    int v = graph[u][j];
    if (dfs_num[v] == 0) {
      dfs_parent[v] = u;
      graphCheck(v);
    } else if (dfs_num[v] == 1) {
      cicle = true;
    }
  }
  dfs_num[u] = 2;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  graph.clear();
  graph.resize(300);
  memset(dfs_parent, -1, sizeof(dfs_parent));
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  bool flag = true;
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0, t = min(a[i].size(), a[i + 1].size()); j < t; j++) {
      if (a[i][j] != a[i + 1][j]) {
        graph[a[i][j]].push_back(a[i + 1][j]);
        break;
      }
    }
  }
  for (int i = 0; i < n - 1; i++) {
    int t1 = a[i].size(), t2 = a[i + 1].size();
    bool f = false;
    for (int j = 0; j < min(t1, t2); j++) {
      if (a[i][j] != a[i + 1][j]) f = true;
    }
    if (!f) {
      if (t2 < t1) cicle = true;
    }
  }
  for (int i = 'a'; i <= 'z'; i++) {
    if (dfs_num[i] == 0) graphCheck(i);
  }
  if (cicle)
    cout << "Impossible" << endl;
  else {
    memset(dfs_parent, -1, sizeof(dfs_parent));
    memset(dfs_num, 0, sizeof(dfs_num));
    ts.clear();
    for (int i = 'a'; i <= 'z'; i++) {
      if (dfs_num[i] == 0) {
        dfs2(i);
      }
    }
    for (int i = ts.size() - 1; i >= 0; i--) {
      cout << (char)ts[i];
      if (!i) cout << endl;
    }
  }
}
