#include <bits/stdc++.h>
using namespace std;
map<char, set<char>> adj;
map<char, long long> visited;
long long tim = 1;
vector<char> ans;
void dfs(char node) {
  if (visited[node] > 0) {
    return;
  } else if (visited[node] == -1) {
    cout << "Impossible";
    exit(0);
  } else {
    visited[node] = -1;
    for (auto x : adj[node]) {
      dfs(x);
    }
    tim++;
    visited[node] = tim;
    ans.push_back(node);
  }
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n;
  cin >> n;
  string s[n];
  long long ma = 0ll;
  for (long long i = 0; i < n; i++) {
    cin >> s[i];
    if (s[i].length() > ma) {
      ma = s[i].length();
    }
  }
  for (long long i = 0; i < n; i++) {
    for (long long j = s[i].length() + 1; j <= ma; j++) {
      s[i] = s[i] + " ";
    }
  }
  for (long long i = 0; i < n - 1; i++) {
    long long ptr = 0;
    while (s[i][ptr] == s[i + 1][ptr]) {
      ptr++;
    }
    if (ptr < ma) {
      if (s[i][ptr] != ' ' && s[i + 1][ptr] == ' ') {
        cout << "Impossible";
        return 0;
      }
      if (s[i][ptr] == ' ' && s[i + 1][ptr] != ' ') {
        continue;
      }
      adj[s[i + 1][ptr]].insert(s[i][ptr]);
    }
  }
  for (long long i = 0; i < 26; i++) {
    if (visited['a' + i] == 0) {
      dfs('a' + i);
    }
  }
  for (auto x : ans) {
    if (x != ' ') cout << x;
  }
}
