#include <bits/stdc++.h>
using namespace std;
int n;
string s[110];
bool ab[30];
bool p[30][30];
bool com(string s1, string s2) {
  int i = 0;
  while (i < min(s1.length(), s2.length())) {
    int c1 = s1[i] - 'a';
    int c2 = s2[i] - 'a';
    i++;
    if (c1 == c2) continue;
    p[c2][c1] = 1;
    ab[c2] = 1;
    ab[c1] = 1;
    return 1;
  }
  if (s1.length() > s2.length()) return 0;
  return 1;
}
int dfsl[30];
int dfsn[30];
int num;
bool v[30];
vector<int> st;
bool b;
void dfs(int x) {
  dfsl[x] = dfsn[x] = ++num;
  v[x] = 1;
  st.push_back(x);
  for (int i = 0; i < 26; i++) {
    if (p[x][i]) {
      if (!dfsn[i]) dfs(i);
      if (v[i]) {
        dfsl[x] = min(dfsl[x], dfsl[i]);
      }
    }
  }
  if (dfsl[x] != dfsn[x]) {
    while (!st.empty()) {
      int z = st.back();
      st.pop_back();
      v[z] = 0;
      if (z == x) break;
    }
    b = 1;
  } else {
    while (!st.empty()) {
      int z = st.back();
      st.pop_back();
      v[z] = 0;
      if (z == x) break;
    }
  }
}
bool ch() {
  int r = 0;
  for (int i = 0; i < 26; i++) {
    if (!dfsn[i]) dfs(i);
    if (b) {
      return 0;
    }
  }
  return 1;
}
void top() {
  int in[30] = {};
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < 26; j++) {
      if (p[i][j]) in[i]++;
    }
  }
  while (1) {
    int x = -1;
    for (int i = 0; i < 30; i++) {
      if (ab[i] && !in[i]) {
        x = i;
        break;
      }
    }
    if (x == -1) return;
    in[x]--;
    for (int i = 0; i < 30; i++) {
      if (p[i][x]) in[i]--;
    }
    cout << (char)(x + 'a');
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> s[i];
  }
  for (int i = 0; i < n - 1; i++) {
    if (!com(s[i], s[i + 1])) {
      cout << "Impossible";
      return 0;
    }
  }
  if (!ch()) {
    cout << "Impossible";
    return 0;
  }
  top();
  for (int i = 0; i < 26; i++) {
    if (!ab[i]) cout << (char)(i + 'a');
  }
  return 0;
}
