#include <bits/stdc++.h>
using namespace std;
int N, E[30] = {0};
bool G[30][30] = {false}, fl = true;
string A[110], ANS;
void build_graph() {
  for (int i = 1; i <= N - 1; i++) {
    for (int j = i + 1; j <= N; j++) {
      string w1 = A[i], w2 = A[j];
      int L = min(w1.length(), w2.length());
      bool chk = false;
      int k = 0;
      for (; k < L; k++) {
        if (w1[k] != w2[k]) {
          chk = true;
          if (G[w1[k] - 96][w2[k] - 96]) break;
          E[w2[k] - 96]++;
          G[w1[k] - 96][w2[k] - 96] = true;
          break;
        }
      }
      if (!chk) {
        if (k == w2.length() && k != w1.size()) fl = false;
      } else
        fl = true;
    }
  }
}
void toposort() {
  queue<int> Q;
  for (int i = 1; i <= 26; i++)
    if (!E[i]) Q.push(i);
  while (!Q.empty()) {
    int node = Q.front();
    Q.pop();
    for (int i = 1; i <= 26; i++) {
      if (G[node][i]) {
        G[node][i] = false;
        E[i]--;
        if (!E[i]) Q.push(i);
      }
    }
    ANS.push_back(node + 96);
  }
}
string getans() {
  if (ANS.size() == 26 && fl)
    return ANS;
  else
    return "Impossible";
}
int main() {
  cin >> N;
  for (int i = 1; i <= N; i++) cin >> A[i];
  build_graph();
  toposort();
  cout << getans();
  return 0;
}
