#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007, maxn = 1000000;
int n;
char s[110][110];
int size[110];
vector<int> adj[32];
int color[32];
vector<int> ans;
bool dfs(int u);
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", s[i]);
    size[i] = (int)strlen(s[i]);
  }
  bool ok = true;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int k;
      for (k = 0; k < min(size[i], size[j]); k++) {
        if (s[i][k] != s[j][k]) {
          adj[s[i][k] - 'a'].push_back(s[j][k] - 'a');
          break;
        }
      }
      if (k == min(size[i], size[j]) and size[j] < size[i]) {
        ok = false;
      }
    }
  }
  for (int i = 0; i < 26; i++) {
    if (!dfs(i)) {
      ok = false;
      break;
    }
  }
  if (!ok)
    printf("Impossible\n");
  else {
    for (int i = (int)ans.size() - 1; i >= 0; i--) {
      printf("%c", ans[i] + 'a');
    }
    for (int i = 0; i < 26; i++)
      if (color[i] == 0) {
        printf("%c", i + 'a');
      }
    printf("\n");
  }
}
bool dfs(int u) {
  if (color[u] == 2)
    return true;
  else if (color[u] == 1)
    return false;
  color[u] = 1;
  for (int i = 0; i < (int)adj[u].size(); i++) {
    if (!dfs(adj[u][i])) {
      return false;
    }
  }
  color[u] = 2;
  ans.push_back(u);
  return true;
}
