#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int SIZE = 1e6 + 10;
int np(long long x) {
  if (x > 0) return 1;
  return -1;
}
int bfs(int v, const vector<set<int> > &t, vector<int> &visited) {
  stack<int> s;
  s.push(v);
  while (!s.empty()) {
    int c = s.top();
    cerr << (char)('a' + c) << endl;
    s.pop();
    visited[c] = 1;
    for (set<int>::iterator i = t[c].begin(); i != t[c].end(); ++i) {
      if (*i == c) continue;
      if (visited[*i] == 1) return 1;
      s.push(*i);
    }
  }
}
int bfs(const vector<set<int> > &t, const vector<pair<int, int> > &o) {
  vector<int> visited(t.size());
  for (int i = 0; i < o.size(); ++i) {
    int v = o[i].second;
    if (visited[v] == 2) {
      continue;
    }
    if (bfs(v, t, visited) == 1) {
      return 1;
    }
  }
  return 0;
}
int dfs(int v, const vector<set<int> > &t, vector<int> &visited,
        vector<int> &result) {
  if (visited[v] == 1) {
    return 1;
  }
  visited[v] = 1;
  for (set<int>::iterator i = t[v].begin(); i != t[v].end(); ++i) {
    if (visited[*i] == 2) {
      continue;
    }
    if (dfs(*i, t, visited, result) == 1) {
      return 1;
    }
  }
  visited[v] = 2;
  result.push_back(v);
  return 0;
}
int main() {
  int n;
  cin >> n;
  string p;
  cin >> p;
  vector<pair<int, int> > o('z' - 'a' + 1);
  for (int i = 0; i < o.size(); ++i) {
    o[i].second = i;
  }
  vector<set<int> > t('z' - 'a' + 1);
  for (int i = 1; i < n; ++i) {
    string c;
    cin >> c;
    int flag = 0;
    for (int j = 0; j < min(p.size(), c.size()); ++j) {
      if (p[j] != c[j]) {
        o[p[j] - 'a'].first++;
        t[c[j] - 'a'].insert(p[j] - 'a');
        flag = 1;
        break;
      }
    }
    if (flag == 0 && c.size() < p.size()) {
      cout << "Impossible" << endl;
      return 0;
    }
    p.swap(c);
  }
  sort(o.begin(), o.end());
  vector<int> result;
  vector<int> visited(t.size());
  for (int i = 0; i < o.size(); ++i) {
    if (visited[o[i].second] == 2) {
      continue;
    }
    if (dfs(o[i].second, t, visited, result) == 1) {
      cout << "Impossible" << endl;
      return 0;
    }
  }
  for (int i = 0; i < result.size(); ++i) {
    cout << (char)('a' + result[i]);
  }
  cout << endl;
  return 0;
}
