#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7, INF = 1e18, mx = 1e6 + 5, mn = 100;
int testCase = 1, cas = 0;
vector<int> G[30];
int vis[30], Flag[30], ok;
string ans;
void dfs(int x) {
  vis[x]++;
  Flag[x] = 1;
  for (int y : G[x]) {
    if (!vis[y] && !Flag[y])
      dfs(y);
    else if (Flag[y])
      ok = 0;
  }
  Flag[x] = 0;
  ans += (x + 'a');
}
int main() {
  ios_base ::sync_with_stdio(0), cin.tie(0);
  while (testCase--) {
    int n;
    cin >> n;
    vector<string> s(n), t(n);
    for (int i = 0; i < n; i++) cin >> s[i], t[i] = s[i];
    sort((t).begin(), (t).end());
    ok = 1;
    for (int i = 0; i < n; i++) {
      if (s[i] != t[i]) ok = 0;
    }
    if (ok) {
      for (int i = 0; i < 26; i++) ans += (i + 'a');
      cout << ans << endl;
      return 0;
    }
    vector<int> v;
    for (int i = 0; i < n - 1; i++) {
      for (int k = i + 1; k < n; k++) {
        if (s[i][0] == s[k][0]) {
          for (int j = 0; j < s[i].size() && j < s[k].size(); j++) {
            if (s[i][j] != s[k][j]) {
              v.push_back(s[i][j] - 'a');
              G[s[i][j] - 'a'].push_back(s[k][j] - 'a');
              break;
            }
          }
        } else {
          v.push_back(s[i][0] - 'a');
          G[s[i][0] - 'a'].push_back(s[k][0] - 'a');
          break;
        }
      }
    }
    ok = 1;
    for (int i = 0; ok && i < v.size(); i++) {
      if (!vis[v[i]]) {
        dfs(v[i]);
      }
    }
    if (!ok || !ans.size())
      ans = "Impossible";
    else {
      reverse((ans).begin(), (ans).end());
      for (int i = 0; ok && i < 26; i++) {
        if (!vis[i]) {
          ans += (i + 'a');
        }
      }
    }
    cout << ans << endl;
  }
  return 0;
}
