#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
vector<long long> vis(26), mark(26), ans;
bool flag = true;
vector<vector<long long>> adj(26);
void dfs(long long x) {
  vis[x] = 1;
  mark[x] = 1;
  for (long long i = 0; i < adj[x].size(); i++) {
    long long node = adj[x][i];
    if (!vis[node]) {
      dfs(node);
    } else if (mark[node]) {
      flag = false;
    }
  }
  mark[x] = 0;
  ans.push_back(x);
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  long long t = 1;
  while (t--) {
    long long n;
    cin >> n;
    string s[n];
    for (long long i = 0; i < n; i++) {
      cin >> s[i];
    }
    for (long long i = 0; i < n - 1; i++) {
      long long j = 0;
      while (s[i][j] == s[i + 1][j] && j < s[i].length() &&
             j < s[i + 1].length()) {
        j++;
      }
      if (j < s[i].length() && j < s[i + 1].length())
        adj[s[i][j] - 'a'].push_back(s[i + 1][j] - 'a');
      else if (s[i].length() > s[i + 1].length())
        flag = false;
    }
    for (long long i = 0; i < 26; i++) {
      if (!vis[i]) {
        dfs(i);
      }
    }
    reverse(ans.begin(), ans.end());
    if (!flag) {
      return cout << "Impossible", 0;
    }
    for (auto x : ans) {
      char ch = 97 + x;
      cout << ch;
    }
  }
  return 0;
}
