#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000 * 100 + 1;
const long long INF = 1e18;
const int MOD = 1000 * 1000 * 1000 + 7;
vector<int> v[MAX];
int vis[MAX];
bool f = 0;
stack<char> s;
void dfs(int x) {
  vis[x] = -1;
  for (auto i : v[x])
    if (!vis[i])
      dfs(i);
    else if (vis[i] == -1)
      f = 1;
  vis[x] = 1;
  s.push(x + 'a' - 1);
}
void print() {
  while (!s.empty()) {
    cout << s.top();
    s.pop();
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int n;
  cin >> n;
  memset(vis, 0, sizeof(vis));
  string s;
  vector<string> ar;
  for (int i = 0; i < n; i++) {
    cin >> s;
    ar.push_back(s);
  }
  for (int i = 0; i < n - 1; i++) {
    string a = ar[i];
    string b = ar[i + 1];
    f = (int)(a).size() > (int)(b).size();
    for (int j = 0; j < ((int)(a).size() > (int)(b).size() ? (int)(b).size()
                                                           : (int)(a).size());
         j++) {
      if (a[j] == b[j]) continue;
      v[a[j] - 'a' + 1].push_back(b[j] - 'a' + 1);
      f = 0;
      break;
    }
  }
  if (f) return cout << "Impossible" << '\n', 0;
  for (int i = 1; i <= 26; i++)
    if (!vis[i]) dfs(i);
  if (f) return cout << "Impossible" << '\n', 0;
  print();
}
