#include <bits/stdc++.h>
struct compare {
  bool operator()(const int& l, const int& r) { return l > r; }
};
using namespace std;
queue<int> q1;
queue<int> q;
priority_queue<int, vector<int>, compare> pq;
vector<int> adj[111];
set<char> s;
int indegree[111];
int main() {
  int n, i, j, k, f = 0, cnt = 0, g = 0;
  char str[101][110], x;
  memset(indegree, 0, sizeof(indegree));
  cin >> n;
  for (i = 0; i < n; i++) {
    cin >> str[i];
  }
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      for (k = 0; k < min(strlen(str[i]), strlen(str[j])); k++) {
        if (str[i][k] != str[j][k]) {
          adj[str[i][k] - 97].push_back(str[j][k] - 97);
          indegree[str[j][k] - 97]++;
          g = 1;
          break;
        }
      }
      if (g == 0 && strlen(str[i]) > strlen(str[j])) {
        f = 1;
      }
      g = 0;
    }
  }
  for (i = 0; i < 26; i++) {
    if (indegree[i] == 0) {
      pq.push(i);
    }
  }
  while (!pq.empty()) {
    int temp = pq.top();
    pq.pop();
    x = temp + 97;
    cnt++;
    q1.push(temp);
    for (i = 0; i < adj[temp].size(); i++) {
      indegree[adj[temp][i]]--;
      if (indegree[adj[temp][i]] == 0) pq.push(adj[temp][i]);
    }
  }
  if (cnt != 26 || f == 1)
    cout << "Impossible" << endl;
  else {
    while (!q1.empty()) {
      int temp = q1.front();
      q1.pop();
      x = 97 + temp;
      cout << x;
    }
  }
  return 0;
}
