#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-9;
const long double pi = acos(-1.0);
const long long inf = 1e+9;
#pragma comment(linker, "/STACK:36777216")
template <typename T>
istream &operator>>(istream &, vector<T> &);
template <typename T>
ostream &operator<<(ostream &, const vector<T> &);
vector<string> s;
int g[126][126] = {};
void go(int l, int r, int t) {
  vector<char> q;
  int last = l;
  bool fl = 0;
  for (int i = l; i <= r; i++) {
    q.push_back(s[i][t]);
    if (s[i][t] != '#') fl = 1;
    if (s[i][t] == '#' && fl) {
      cout << "Impossible" << endl;
      exit(0);
    }
    if (s[i][t] != s[last][t]) {
      go(last, i - 1, t + 1);
      last = i;
    }
  }
  if (last != r) go(last, r, t + 1);
  for (int i = 0; i < q.size(); i++)
    for (int k = i + 1; k < q.size(); k++)
      if (q[i] != q[k]) g[q[i]][q[k]] = 1;
}
int used[126] = {};
vector<int> order;
void dfs(int v) {
  used[v] = 1;
  for (int i = 0; i < 126; i++)
    if (g[v][i]) {
      if (used[i] == 0) dfs(i);
      if (used[i] == 1) {
        cout << "Impossible" << endl;
        exit(0);
      }
    }
  used[v] = 2;
  order.push_back(v);
}
int main() {
  int n;
  cin >> n;
  s.resize(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    while (s[i].size() < 105) s[i].push_back('#');
  }
  go(0, n - 1, 0);
  for (int i = 0; i < 126; i++)
    if (!used[i]) dfs(i);
  reverse(order.begin(), order.end());
  bool fl = 0;
  string ans;
  for (int i = 0; i < order.size(); i++) {
    if ('a' <= order[i] && order[i] <= 'z') ans.push_back(char(order[i]));
  }
  cout << ans << endl;
  return 0;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) is >> v[i];
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) os << v[i] << " ";
  return os;
}
