#include <bits/stdc++.h>
using namespace std;
int w[30][30], n, in[26];
string p[105];
vector<int> ans;
bool solve() {
  queue<int> q;
  ans.clear();
  for (int i = 0; i < 26; ++i)
    if (in[i] == 0) q.push(i);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    ans.push_back(u);
    for (int i = 0; i < 26; ++i) {
      if (w[u][i]) {
        w[u][i] = 0;
        --in[i];
        if (in[i] == 0) q.push(i);
      }
    }
  }
  if (ans.size() < 26) return false;
  return true;
}
int main() {
  while (~scanf("%d", &n)) {
    memset(w, 0, sizeof(w));
    memset(in, 0, sizeof(in));
    for (int i = 0; i < n; ++i) cin >> p[i];
    bool ok = true;
    for (int i = 0; i < n; ++i)
      for (int j = i + 1; j < n; ++j) {
        int len = min(p[i].size(), p[j].size());
        bool flag = true;
        for (int k = 0; k < len; ++k)
          if (p[i][k] != p[j][k]) {
            flag = false;
            if (!w[p[i][k] - 'a'][p[j][k] - 'a']) {
              w[p[i][k] - 'a'][p[j][k] - 'a'] = 1;
              ++in[p[j][k] - 'a'];
            }
            break;
          }
        if (flag && p[i].size() > p[j].size()) ok = false;
      }
    if (!ok) {
      printf("Impossible\n");
      continue;
    }
    if (!solve())
      printf("Impossible\n");
    else {
      for (int i = 0; i < 26; ++i) printf("%c", char(ans[i] + 'a'));
      printf("\n");
    }
  }
  return 0;
}
