#include <bits/stdc++.h>
using namespace std;
void start() {}
void sober() {
  long long int n, x = 0, a = 0, b = 0, y = 0, sum = 0, k = 0, m = 0;
  vector<char> ans(26);
  cin >> n;
  vector<string> v, ace;
  map<string, vector<int> > mp;
  for (long long int i = 0; i < n; i++) {
    string s;
    cin >> s;
    v.push_back(s);
    mp[s].push_back(i);
  }
  int dp[26][26] = {0};
  for (long long int i = 1; i < n; i++) {
    int j = 0;
    for (j = 0; j < min(v[i].length(), v[i - 1].length()); j++) {
      if (v[i][j] == v[i - 1][j])
        continue;
      else
        break;
    }
    if (j == v[i - 1].length())
      continue;
    else if (j == v[i].length() and v[i].length() < v[i - 1].length()) {
      cout << "Impossible\n";
      return;
    } else if (j < v[i].length() and j < v[i - 1].length()) {
      dp[v[i][j] - 'a'][v[i - 1][j] - 'a'] = 1;
    }
  }
  for (long long int i = 0; i < 26; i++) ans[i] = i + 'a';
  for (long long int i = 0; i < 26; i++) {
    for (long long int j = 0; j < 26; j++) {
      for (long long int k = j + 1; k < 26; k++) {
        if (dp[ans[j] - 'a'][ans[k] - 'a']) swap(ans[j], ans[k]);
      }
    }
  }
  for (long long int i = 0; i < 26; i++)
    for (long long int j = i + 1; j < 26; j++) {
      if (dp[ans[i] - 'a'][ans[j] - 'a']) {
        cout << "Impossible\n";
        return;
      }
    }
  for (auto i : ans) cout << i;
  return;
}
signed main() {
  start();
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  while (t--) {
    sober();
  }
}
