#include <bits/stdc++.h>
using namespace std;
void dfs(vector<vector<int>> &less_than, vector<string> &words, int first,
         int last, int depth) {
  char last_char = 0;
  int last_index = -1;
  while (words[first].size() <= depth && first < last) {
    ++first;
  }
  for (int i = first; i < last; ++i) {
    if (words[i].size() <= depth) {
      cout << "Impossible" << endl;
      exit(0);
    }
    char const curr = words[i][depth];
    if (last_char == 0) {
      last_char = curr;
      last_index = i;
      continue;
    }
    if (last_char != curr) {
      less_than[last_char - 'a'].push_back(curr - 'a');
      dfs(less_than, words, last_index, i, depth + 1);
      last_char = curr;
      last_index = i;
    }
  }
  if (last_index >= 0 && last - last_index >= 2) {
    dfs(less_than, words, last_index, last, depth + 1);
  }
}
int dfs2(vector<vector<int>> const &g, int v, vector<int> &color,
         vector<int> &exit_time, int t) {
  if (color[v] == 1) {
    cout << "Impossible" << endl;
    exit(0);
  }
  if (color[v] == 2) {
    return t;
  }
  color[v] = 1;
  for (int i = 0; i < g[v].size(); ++i) {
    t = dfs2(g, g[v][i], color, exit_time, t);
  }
  color[v] = 2;
  exit_time[v] = t;
  return --t;
}
int main() {
  int n = 0;
  cin >> n;
  vector<string> words(n);
  for (auto &w : words) {
    cin >> w;
  }
  vector<vector<int>> less_than(26);
  dfs(less_than, words, 0, n, 0);
  vector<int> color(26, 0);
  vector<int> exit_time(26, 0);
  int timer = 0;
  for (int i = 25; i >= 0; --i) {
    if (color[i] != 2) {
      timer = dfs2(less_than, i, color, exit_time, timer);
    }
  }
  vector<pair<int, char>> abc(26);
  for (int i = 0; i < 26; ++i) {
    abc[i] = make_pair(exit_time[i], i + 'a');
  }
  sort(abc.begin(), abc.end());
  for (int i = 0; i < 26; ++i) {
    cout << abc[i].second;
  }
  cout << endl;
}
