#include <bits/stdc++.h>
using namespace std;
int graph[27][27];
string inp[101];
int visit[27];
stack<int> st;
int getnum(char c) {
  if (c != ' ')
    return (c - 'a' + 1);
  else
    return (0);
}
void dfs(int i) {
  visit[i] = 1;
  for (int j = 1; j <= 26; j++) {
    if (!visit[j] && graph[i][j]) dfs(j);
  }
  st.push(i);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    cin >> inp[i];
    inp[i] += " ";
  }
  for (int i = 1; i <= 26; i++) graph[0][i] = 1;
  for (int i = 1; i < n; i++) {
    int ps = 0;
    while (inp[i][ps] == inp[i + 1][ps]) ps++;
    graph[getnum(inp[i][ps])][getnum(inp[i + 1][ps])] = 1;
  }
  for (int i = 0; i <= 26; i++) {
    for (int j = 0; j <= 26; j++) {
      for (int k = 0; k <= 26; k++) {
        if (graph[i][j] & graph[j][k]) graph[i][k] = 1;
      }
    }
  }
  bool cycle = false;
  for (int i = 0; i <= 26; i++) {
    if (graph[i][i]) cycle = true;
  }
  if (cycle == true) {
    cout << "Impossible";
    return (0);
  }
  for (int i = 1; i <= 26; i++) {
    if (!visit[i]) dfs(i);
  }
  int len = st.size();
  for (int i = 0; i < len; i++) {
    int a = st.top();
    st.pop();
    printf("%c", 'a' + a - 1);
  }
  return (0);
}
