#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, -1, 0};
int dy[] = {1, -1, 0};
int n;
vector<int> adj[30];
vector<int> ans;
stack<int> stk;
bool have[30], vis[30], cycle = 0;
void dfs(int i) {
  if (vis[i]) {
    if (have[i]) cycle = 1;
    return;
  }
  have[i] = 1;
  vis[i] = 1;
  for (auto x : adj[i]) dfs(x);
  ans.push_back(i);
  have[i] = 0;
}
int main() {
  scanf("%d", &n);
  string s, last = "";
  for (int k = 0; k < n; k++) {
    cin >> s;
    if (!k) {
      last = s;
      continue;
    }
    int i;
    for (i = 0; i < min(last.length(), s.length()); i++) {
      if (last[i] == s[i]) continue;
      adj[last[i] - 'a'].push_back(s[i] - 'a');
      break;
    }
    if (i == min(last.length(), s.length()) && last.length() > s.length())
      cycle = 1;
    last = s;
  }
  for (int i = 0; i < 26; i++) {
    if (!vis[i]) {
      memset(have, 0, ((int)(sizeof(have))));
      dfs(i);
    }
  }
  if (cycle) return 0 * printf("Impossible\n");
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) printf("%c", ans[i] + 'a');
  puts("");
  return 0;
}
