#include <bits/stdc++.h>
int fcin() {
  register int c = getchar();
  int x = 0;
  for (; (c < 48 || c > 57); c = getchar())
    ;
  for (; c > 47 && c < 58; c = getchar()) {
    x = (x << 1) + (x << 3) + c - 48;
  }
  return x;
}
using namespace std;
long long power(long long a, long long b) {
  long long ans = 1LL;
  while (b) {
    if (b & 1) ans = (ans * a) % 1000000007;
    a = (a * a) % 1000000007;
    b /= 2;
  }
  return ans;
}
vector<int> adj[27];
int indeg[27], vis[27], st[27];
int anss = 1;
vector<int> ans;
int timers;
void dfs(int node) {
  if (vis[node]) return;
  st[node] == ++timers;
  ans.push_back(node);
  vis[node] = 1;
  int i;
  for (i = 0; i < adj[node].size(); i++) {
    if (st[adj[node][i]] < st[node]) anss = 0;
    dfs(adj[node][i]);
  }
  return;
}
string s[108];
int main() {
  int t, m, n, i, j, k, l;
  scanf("%d", &n);
  for (i = 0; i < n; i++) cin >> s[i];
  for (i = 0; i <= 26; i++) adj[i].clear();
  timers = 0;
  anss = 1;
  memset(indeg, 0, sizeof(indeg));
  for (i = 0; i < n - 1; i++) {
    int fg;
    for (k = i + 1; k < n; k++) {
      fg = 0;
      for (j = 0; j < min(s[i].length(), s[k].length()); j++) {
        if (s[i][j] != s[k][j]) {
          fg = 1;
          break;
        }
      }
      if (!fg) {
        if (s[i].length() > s[k].length()) anss = 0;
      } else {
        adj[s[i][j] - 'a'].push_back(s[k][j] - 'a');
        indeg[s[k][j] - 'a']++;
      }
    }
  }
  memset(vis, 0, sizeof(vis));
  ans.clear();
  memset(st, 0, sizeof(st));
  queue<int> q;
  for (i = 0; i < 26; i++) {
    if (!indeg[i]) q.push(i);
  }
  while (q.size()) {
    int x = q.front();
    ans.push_back(x);
    vis[x] = 1;
    q.pop();
    for (i = 0; i < adj[x].size(); i++) {
      indeg[adj[x][i]]--;
      if (indeg[adj[x][i]] == 0 && !vis[adj[x][i]]) q.push(adj[x][i]);
    }
  }
  for (i = 0; i < 26; i++)
    if (!vis[i]) anss = 0;
  if (!anss) {
    cout << "Impossible\n";
    return 0;
  }
  for (i = 0; i < 26; i++) cout << char('a' + ans[i]);
  cout << "\n";
  return 0;
}
