#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 + 3, MAXC = 'z' + 3, TOF = 33;
int n;
bool m[MAXC][MAXC];
string s[MAXN];
char a[26];
bool cmp(char c, char cc) { return m[c][cc]; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 1; i < n; i++) {
    bool b = false;
    for (int j = 0; j < min(s[i].size(), s[i - 1].size()); j++)
      if (s[i][j] != s[i - 1][j]) {
        m[s[i - 1][j]][s[i][j]] = true;
        b = true;
        break;
      }
    if (!b)
      if (s[i].size() < s[i - 1].size()) return cout << "Impossible", 0;
  }
  for (int q = 0; q < TOF; q++)
    for (int j = 'a'; j <= 'z'; j++)
      for (int k = 'a'; k <= 'z'; k++)
        for (int i = 'a'; i <= 'z'; i++) m[i][j] |= (m[i][k] && m[k][j]);
  for (int i = 'a'; i <= 'z'; i++)
    for (int j = 'a'; j <= 'z'; j++)
      if (m[i][j] && m[j][i])
        return cout << "Impossible", 0;
      else if (!m[i][j] && !m[j][i]) {
        m[i][j] = true;
        for (int q = 0; q < TOF; q++)
          for (int j = 'a'; j <= 'z'; j++)
            for (int k = 'a'; k <= 'z'; k++)
              for (int i = 'a'; i <= 'z'; i++) m[i][j] |= (m[i][k] && m[k][j]);
      }
  for (int i = 0; i < 26; i++) a[i] = 'a' + i;
  sort(a, a + 26, cmp);
  for (auto i : a) cout << i;
  return 0;
}
