#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::map;
using std::max;
using std::min;
using std::pair;
using std::queue;
using std::sort;
using std::string;
using std::vector;
int hasLoop = 0;
int edges[26][26] = {
    0,
};
int visited[26] = {
    0,
};
int finish[26] = {
    0,
};
int f = 0;
void dfs(int x) {
  visited[x] = 1;
  for (int i = 0; i < 26; i++) {
    if (edges[x][i] == 1) {
      if (visited[i] == 1) {
        hasLoop = 1;
        continue;
      }
      if (visited[i] == 0) dfs(i);
    }
  }
  visited[x] = 2;
  finish[x] = f;
  f++;
}
int main() {
  int n;
  cin >> n;
  string names[100];
  for (int i = 0; i < n; i++) {
    cin >> names[i];
  }
  for (int i = 0; i < n - 1; i++) {
    if (names[i + 1] == names[i].substr(0, names[i + 1].size()) &&
        names[i].size() > names[i + 1].size()) {
      cout << "Impossible";
      return 0;
    }
    for (int j = 0; j < min(names[i].size(), names[i + 1].size()); j++) {
      if (names[i][j] != names[i + 1][j]) {
        edges[names[i][j] - 'a'][names[i + 1][j] - 'a'] = 1;
        break;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    if (visited[i] == 0) {
      dfs(i);
    }
  }
  if (hasLoop) {
    cout << "Impossible";
  } else {
    for (int i = 25; i >= 0; i--) {
      for (int j = 0; j < 26; j++) {
        if (finish[j] == i) {
          printf("%c", j + 'a');
        }
      }
    }
  }
  return 0;
}
