#include <bits/stdc++.h>
using namespace std;
list<int> adjList[27];
int ined[27];
bool visited[27];
vector<int> ans;
bool path(int a, int b) {
  for (int vtx : adjList[a]) {
    if (vtx == b) return 1;
    if (path(vtx, b)) return 1;
  }
  return 0;
}
bool edge(string s, string t) {
  int l = min(s.length(), t.length());
  for (int i = 0; i < l; i++) {
    if (s[i] == t[i]) continue;
    if (path(s[i] - 'a', t[i] - 'a')) return false;
    adjList[t[i] - 'a'].push_back(s[i] - 'a');
    ined[s[i] - 'a']++;
    return true;
  }
  if (t.length() < s.length()) return false;
  return true;
}
void dfs(int i) {
  for (int vtx : adjList[i]) {
    if (!visited[vtx]) {
      visited[vtx] = 1;
      dfs(vtx);
    }
  }
  cout << (char)(i + 'a');
}
int main() {
  int(n);
  scanf("%d", &(n));
  n--;
  string s, t;
  cin >> s;
  while (n--) {
    cin >> t;
    if (!edge(s, t)) {
      cout << "Impossible\n";
      return 0;
    }
    s = t;
  }
  for (int i = 0; i < 26; i++) {
    if (!ined[i]) {
      visited[i] = 1;
      dfs(i);
    }
  }
  return 0;
}
