#include <bits/stdc++.h>
using namespace std;
int differ[100] = {0};
int edge[26][26] = {0}, degree[26] = {0};
int visited[26] = {0};
vector<int> vc;
bool flag = true;
int main() {
  int n;
  string s[100];
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < 100; i++) {
    for (int j = 1; j < n; j++) {
      if (differ[j]) continue;
      if (i >= s[j].size() || i >= s[j - 1].size()) {
        differ[j] = 1;
        if (s[j - 1].size() > s[j].size()) flag = false;
        continue;
      }
      if (s[j][i] != s[j - 1][i]) differ[j] = 1;
      if (differ[j] == 0) continue;
      edge[s[j - 1][i] - 'a'][s[j][i] - 'a'] = 1;
    }
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < 26; j++) {
      if (edge[i][j] == 1) degree[j]++;
    }
  }
  int k = 26;
  while (k--) {
    int key = -1;
    for (int i = 0; i < 26; i++) {
      if (visited[i] == 1) continue;
      if (degree[i] == 0) {
        key = i;
        break;
      }
    }
    if (key == -1) {
      flag = false;
      break;
    }
    for (int i = 0; i < 26; i++) {
      if (edge[key][i] == 1) degree[i]--;
    }
    vc.push_back(key);
    visited[key] = 1;
  }
  if (!flag)
    cout << "Impossible\n";
  else {
    for (int i = 0; i < 26; i++) cout << char('a' + vc[i]);
    cout << '\n';
  }
}
