#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000009;
string z[111];
bool flag = true;
map<int, map<int, int> > mp;
vector<int> v[2000];
bool w[1000];
vector<int> ans[100];
int q[1000];
void dfs(int g) {
  if (q[g] != -1) return;
  q[g] = 0;
  for (int j = 0; j < v[g].size(); j++) {
    dfs(v[g][j]);
    q[g] = max(q[v[g][j]] + 1, q[g]);
  }
  ans[q[g]].push_back(g);
}
void gao(string x, string c) {
  if (x.size() >= c.size()) {
    int g = 0;
    while (g < c.size() && x[g] == c[g]) g++;
    if (g != c.size()) {
      mp[x[g]][c[g]] = 1;
    } else {
      flag = false;
      return;
    }
  } else {
    int g = 0;
    while (g < x.size() && x[g] == c[g]) g++;
    if (g != x.size()) {
      mp[x[g]][c[g]] = 1;
    }
  }
}
int a[30];
set<int> s[50];
void gao(int g) {
  w[g] = true;
  for (int j = 0; j < 26; j++) {
    if (!w[j] && mp[g + 'a'][j + 'a']) gao(j);
  }
  for (int j = 0; j < 26; j++) {
    if (mp[g + 'a'][j + 'a']) {
      for (set<int>::iterator it = s[j].begin(); it != s[j].end(); it++) {
        mp[g + 'a'][(*it) + 'a'] = 1;
        s[g].insert(*it);
      }
      s[g].insert(j);
    }
  }
}
int main() {
  memset(q, -1, sizeof(q));
  int n;
  cin >> n;
  for (int j = 0; j < n; j++) cin >> z[j];
  for (int j = 0; j < n; j++) {
    for (int k = j + 1; k < n; k++) {
      gao(z[j], z[k]);
    }
  }
  for (int j = 0; j < 26; j++) {
    gao(j);
  }
  memset(w, 0, sizeof(w));
  for (int j = 0; j < 26; j++) {
    for (int k = 0; k < 26; k++) {
      if (mp[('a' + j)][('a' + k)] && mp[('a' + k)][('a' + j)]) flag = false;
      if (mp[j + 'a'][k + 'a']) {
        v[j].push_back(k);
        w[k] = true;
      }
    }
  }
  if (!flag) {
    cout << "Impossible" << endl;
    return 0;
  }
  for (int j = 0; j < 26; j++) {
    if (!w[j]) v[26].push_back(j);
  }
  dfs(26);
  int g = 0;
  for (int j = 0; j < 30; j++) a[j] = -1;
  for (int j = 30; j >= 0; j--) {
    for (int k = 0; k < ans[j].size(); k++) {
      if (ans[j][k] != 26) a[g++] = ans[j][k];
    }
  }
  for (int j = 0; j < 26; j++)
    if (a[j] == -1) a[j] = j;
  memset(w, 0, sizeof(w));
  for (int j = 0; j < 26; j++) w[a[j]] = true;
  for (int j = 0; j < 26; j++)
    if (!w[j]) {
      cout << "Impossible" << endl;
      return 0;
    }
  for (int j = 0; j < 26; j++) cout << (char)('a' + a[j]);
  cout << endl;
  return 0;
}
