#include <bits/stdc++.h>
using namespace std;
const int kMaxC = 26;
const int kMaxN = 128;
int CharToInt(char c) { return c - 'a'; }
vector<int> adj[kMaxC];
int in[kMaxC];
void init() {
  memset(in, 0, sizeof(in));
  for (int i = 0; i < kMaxC; ++i) adj[i].clear();
}
bool ok = 1;
void Process(string &a, string &b) {
  int pa = 0, pb = 0;
  while (pa < a.length() && pb < b.length()) {
    if (a[pa] != b[pb]) {
      adj[CharToInt(a[pa])].push_back(CharToInt(b[pb]));
      ++in[CharToInt(b[pb])];
      return;
    } else {
      ++pa;
      ++pb;
    }
  }
  if (pa < a.length()) ok = 0;
}
string TopSort() {
  queue<int> Q;
  string ans = "";
  for (int i = 0; i < kMaxC; ++i)
    if (in[i] == 0) {
      Q.push(i);
      ans = ans + char(i + 'a');
    }
  while (!Q.empty()) {
    int q = Q.front();
    Q.pop();
    for (int i = 0; i < adj[q].size(); ++i) {
      int v = adj[q][i];
      in[v]--;
      if (in[v] < 0)
        return "Impossible";
      else if (in[v] == 0) {
        ans = ans + char('a' + v);
        Q.push(v);
      }
    }
  }
  for (int i = 0; i < kMaxC; ++i)
    if (in[i] != 0) return "Impossible";
  if (ans.size() != 26) return "Impossible";
  return ans;
}
int N;
string s[kMaxN];
int main() {
  scanf("%d", &N);
  init();
  ok = 1;
  for (int i = 0; i < N; ++i) {
    cin >> s[i];
  }
  for (int i = 0; i < N; ++i) {
    for (int j = i + 1; j < N; ++j) {
      Process(s[i], s[j]);
    }
  }
  if (ok)
    cout << TopSort() << "\n";
  else
    puts("Impossible");
}
