#include <bits/stdc++.h>
using namespace std;
long long mod = 10e9 + 7;
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long modularExp(long long x, long long n, long long mod) {
  long long result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % mod;
    x = ((x % mod) * (x % mod)) % mod;
    n = n / 2;
  }
  return (result) % mod;
}
bool isPrime(long long n) {
  for (long long i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
vector<long long> v[26], visited(26, 0), indeg(26, 0), recstack(26, 0);
bool dfs(long long x) {
  visited[x] = 1;
  recstack[x] = 1;
  long long i;
  for (i = 0; i < v[x].size(); i++) {
    if (!visited[v[x][i]] && dfs(v[x][i]))
      return true;
    else if (recstack[v[x][i]])
      return true;
  }
  recstack[x] = 0;
  return false;
}
int main() {
  long long n;
  cin >> n;
  long long i, j, k;
  vector<string> list(n + 1);
  for (i = 1; i <= n; i++) cin >> list[i];
  for (i = 1; i <= n - 1; i++) {
    string s = list[i];
    string t = list[i + 1];
    j = 0, k = 0;
    long long flag = 0;
    while (j < s.length() && k < t.length()) {
      if (s[j] != t[k]) {
        long long c1 = s[j] - 'a';
        long long c2 = t[k] - 'a';
        indeg[c2] += 1;
        v[c1].push_back(c2);
        flag = 1;
        break;
      }
      j++;
      k++;
    }
    if (flag == 0 && s.length() > t.length()) {
      cout << "Impossible";
      return 0;
    }
  }
  for (i = 0; i < 26; i++) {
    if (!visited[i]) {
      if (dfs(i)) {
        cout << "Impossible\n";
        return 0;
      }
    }
  }
  for (i = 0; i < 26; i++) visited[i] = 0;
  queue<long long> q;
  for (i = 0; i < 26; i++)
    if (indeg[i] == 0) {
      q.push(i);
      visited[i] = 1;
    }
  vector<long long> ans;
  while (!q.empty()) {
    long long top = q.front();
    q.pop();
    ans.push_back(top);
    for (i = 0; i < v[top].size(); i++) {
      indeg[v[top][i]] -= 1;
      if (indeg[v[top][i]] == 0) {
        q.push(v[top][i]);
        visited[v[top][i]] = 1;
      }
    }
  }
  for (i = 0; i < ans.size(); i++) {
    char c = ans[i] + 'a';
    cout << c;
  }
}
