#include <bits/stdc++.h>
using namespace std;
long long mo(long long a) { return a % (long long)(1e9 + 7); }
long long po(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y >>= 1;
    x = (x * x) % p;
  }
  return res % p;
}
void dij(long long src, vector<long long> &dist, vector<vector<long long>> &gr,
         vector<vector<long long>> &cost, vector<vector<long long>> &cap,
         vector<long long> &par) {
  set<pair<long long, long long>> se;
  dist[src] = 0;
  se.insert({0, src});
  while (!se.empty()) {
    pair<long long, long long> e = *se.begin();
    se.erase(se.begin());
    long long f = e.first, s = e.second;
    for (long long ele : gr[s]) {
      if (cap[s][ele] <= 0) continue;
      if (dist[ele] > dist[s] + cost[s][ele]) {
        if (dist[ele] != (long long)(1e18 + 5)) se.erase({dist[ele], ele});
        dist[ele] = dist[s] + cost[s][ele];
        par[ele] = s;
        se.insert({dist[ele], ele});
      }
    }
  }
}
vector<vector<long long>> gr;
vector<long long> vis, ans, in;
bool pos = true;
vector<long long> dp, point;
void dfs(long long parent) {
  vis[parent] = 1;
  for (long long e : gr[parent]) {
    if (!vis[e]) dfs(e);
  }
  ans.push_back(parent);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  gr.resize(26);
  vis.assign(26, 0);
  string s1, s2;
  cin >> s1;
  cin >> ws;
  for (long long i = 1; i < n; i++) {
    cin >> ws;
    cin >> s2;
    cin >> ws;
    long long n1 = s1.size(), n2 = s2.size();
    long long f = 1;
    for (long long j = 0; j < min(n1, n2); j++) {
      if (s1[j] != s2[j]) {
        f = 0;
        gr[s1[j] - 'a'].push_back(s2[j] - 'a');
        break;
      }
    }
    if (f) {
      if (n1 > n2) pos = false;
    }
    s1 = s2;
  }
  for (long long i = 0; i < 26; i++) {
    if (!vis[i]) dfs(i);
  }
  reverse(ans.begin(), ans.end());
  in.assign(26, -1);
  for (long long i = 0; i < (long long)ans.size(); i++) {
    in[ans[i]] = i;
  }
  for (long long i = 0; i < 26; i++) {
    for (long long e : gr[i]) {
      if (in[e] < in[i]) {
        pos = false;
      }
    }
  }
  if (pos) {
    for (long long i = 0; i < ans.size(); i++) {
      cout << (char)(ans[i] + 'a');
    }
    cout << "\n";
  } else {
    cout << "Impossible\n";
  }
  return 0;
}
