#include <bits/stdc++.h>
using namespace std;
int n;
vector<list<int> > vl;
vector<int> out;
void fn() {
  for (int i = 0; i <= 26; i++) {
    list<int> l;
    vl.push_back(l);
    out.push_back(0);
  }
  cin >> n;
  string prev, cur;
  for (int i = 0; i < n; i++) {
    if (i == 0) {
      cin >> prev;
      continue;
    } else {
      cin >> cur;
      for (int i = 0; i < prev.length() && i < cur.length(); i++) {
        if (prev[i] != cur[i]) {
          vl[prev[i] - 'a' + 1].push_back(cur[i] - 'a' + 1);
          out[cur[i] - 'a' + 1]++;
          break;
        } else if (i == cur.length() - 1 && prev[i] == cur[i]) {
          vl[prev[i] - 'a' + 1].push_back(cur[i] - 'a' + 1);
          out[cur[i] - 'a' + 1]++;
          break;
        }
      }
    }
    prev = cur;
  }
}
int main() {
  fn();
  queue<int> q;
  vector<int> res;
  vector<bool> visited(27, 0);
  for (int i = 1; i <= 26; i++) {
    if (out[i] == 0 && visited[i] == 0) {
      q.push(i);
      visited[i] = true;
    }
    while (!q.empty()) {
      int f = q.front();
      res.push_back(f);
      q.pop();
      list<int> al = vl[f];
      list<int>::iterator it;
      for (it = al.begin(); it != al.end(); it++) {
        out[*it]--;
      }
      for (int k = 1; k <= 26; k++) {
        if (visited[k] == 0 && out[k] == 0) {
          q.push(k);
          visited[k] = 1;
          break;
        }
      }
    }
  }
  if (res.size() != 26) {
    cout << "Impossible";
  } else {
    for (int i = 0; i < res.size(); i++) {
      cout << (char)(res[i] + 'a' - 1);
    }
  }
  return 0;
}
