#include <bits/stdc++.h>
using namespace std;
vector<int> graph[102] = {};
bool visited[102] = {false};
bool visitedcycle[102] = {false};
bool restack[102] = {false};
stack<int> sta;
bool iscycle(int v) {
  if (visitedcycle[v] == false) {
    visitedcycle[v] = true;
    restack[v] = true;
    vector<int>::iterator it = graph[v].begin();
    for (; it != graph[v].end(); it++) {
      if (visitedcycle[*it] == false && iscycle(*it))
        return true;
      else if (restack[*it])
        return true;
    }
  }
  restack[v] = false;
  return false;
}
void toposort(int vertex) {
  visited[vertex] = true;
  vector<int>::iterator it = graph[vertex].begin();
  for (; it != graph[vertex].end(); it++) {
    if (visited[*it] == false) toposort(*it);
  }
  sta.push(vertex);
}
int main() {
  int n, i, j, k, l, answer = 0, flag = 0;
  string a[102] = {};
  cin >> n;
  for (i = 0; i < n; i++) cin >> a[i];
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      l = min(a[i].length(), a[j].length());
      flag = 0;
      for (k = 0; k < l; k++) {
        if (a[i][k] != a[j][k]) {
          graph[a[i][k] - 97].push_back(a[j][k] - 97);
          break;
        } else {
          flag++;
          continue;
        }
      }
      if (flag == l) {
        if (a[i].length() > a[j].length()) answer = -1;
      }
    }
  }
  for (i = 0; i < 26; i++) {
    if (iscycle(i) == true) {
      answer = -1;
      break;
    }
  }
  vector<int>::iterator it;
  for (i = 0; i < 26; i++) {
    if (visited[i] == false) toposort(i);
  }
  if (answer == -1)
    cout << "Impossible" << endl;
  else {
    while (sta.empty() != true) {
      cout << (char)(sta.top() + 97);
      sta.pop();
    }
  }
  return 0;
}
