#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
const int N = 2005;
set<char> vowel = {'A', 'O', 'Y', 'E', 'U', 'I', 'a', 'o', 'y', 'e', 'u', 'i'};
long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a % b)); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
bool issquare(long long w) { return trunc(sqrt(w)) * trunc(sqrt(w)) == w; }
long long mod(long long to_mod) {
  to_mod %= MOD;
  while (to_mod < 0) to_mod += MOD;
  return to_mod % MOD;
}
int dx[] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[] = {0, 0, 1, -1, 1, 1, -1, -1};
long long n, m, k, a, l, r, b, t, ans = 0, res = 0, posmin, posmax, x, y, z, V,
                                  www, eee, w, e, xmax = 0, ymax = 0;
vector<long long> vv, v;
long long dfsroot;
vector<char> vc;
double db;
vector<string> vs;
vector<pair<long long, long long> > vvv, sss;
map<long long, set<long long> > adj;
char c;
bool check = true, vis[30];
map<long long, long long> maa;
map<string, long long> ma;
string ch, ch1, ch2;
stack<long long> ss;
void dfs1(long long src) {
  if (vis[src]) return;
  vis[src] = 1;
  for (auto t : adj[src]) {
    if (t == dfsroot) {
      check = false;
      return;
    }
    if (vis[t]) continue;
    dfs1(t);
  }
}
void dfs(long long src) {
  if (vis[src]) return;
  vis[src] = 1;
  for (auto t : adj[src]) {
    if (vis[t]) {
      continue;
    }
    dfs(t);
  }
  ss.push(src);
}
int main() {
  ios_base::sync_with_stdio(false);
  memset(vis, 0, sizeof(vis));
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> ch;
    vs.push_back(ch);
  }
  if (n == 1) {
    for (c = 'a'; c <= 'z'; c++) cout << c;
    return 0;
  }
  for (int i = 0; i < n - 1; i++) {
    ch = vs[i];
    ch1 = vs[i + 1];
    long long j = 0;
    while (j < min(ch.size(), ch1.size()) && ch[j] == ch1[j]) j++;
    if (j >= min(ch.size(), ch1.size())) {
      if (ch.size() > ch1.size()) {
        cout << "Impossible";
        return 0;
      }
      continue;
    }
    adj[ch1[j] - 'a'].insert(ch[j] - 'a');
  }
  for (int i = 0; i < 26; i++) {
    memset(vis, 0, sizeof(vis));
    dfsroot = i;
    dfs1(i);
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 0; i < 26; i++) {
    if (vis[i] == false) dfs(i);
  }
  if (check == false) {
    cout << "Impossible";
    return 0;
  }
  while (!ss.empty()) {
    vc.push_back(char(ss.top() + 97));
    ss.pop();
  }
  for (int i = 25; i >= 0; i--) {
    cout << vc[i];
  }
  return 0;
}
