#include <bits/stdc++.h>
using namespace std;
int n;
int g[27][27];
string s[101];
bool visited[27];
int main() {
  memset(g, 0, sizeof(g));
  for (int i = 1; i <= 26; i++) g[0][i] = true;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> s[i];
  }
  bool flag = false;
  for (int i = 1; i < n; i++) {
    int pos = 0;
    while (s[i][pos] == s[i + 1][pos] && pos < s[i].length() &&
           pos < s[i + 1].length())
      pos++;
    if (pos != s[i].length() && pos != s[i + 1].length())
      g[s[i][pos] - 'a' + 1][s[i + 1][pos] - 'a' + 1] = true;
    else if (s[i].length() > s[i + 1].length())
      flag = true;
  }
  if (flag) {
    cout << "Impossible\n";
  } else {
    for (int k = 0; k <= 26; k++)
      for (int i = 0; i <= 26; i++)
        for (int j = 0; j <= 26; j++) g[i][j] |= g[i][k] & g[k][j];
    bool havecycle = false;
    for (int i = 0; i <= 26; i++) havecycle |= g[i][i];
    if (havecycle)
      cout << "Impossible\n" << endl;
    else {
      memset(visited, 0, sizeof(visited));
      for (int i = 0; i <= 26; i++) {
        int now = 0;
        for (int j = 0; j <= 26; j++) {
          bool valid = (!visited[j]);
          for (int k = 0; k <= 26; k++)
            if (visited[k] == false && g[k][j]) {
              valid = false;
            }
          if (valid) {
            now = j;
            break;
          }
        }
        if (i > 0) cout << char('a' + now - 1);
        visited[now] = true;
      }
      cout << endl;
    }
  }
  return 0;
}
