#include <bits/stdc++.h>
using namespace std;
vector<long long int> v[27];
long long int visited[27], flag;
stack<long long int> lis;
map<pair<long long int, long long int>, long long int> m;
void dfs(long long int x, long long int y) {
  visited[x] = 1;
  for (int i = 0; i < v[x].size(); i++) {
    if (!visited[v[x][i]])
      dfs(v[x][i], y);
    else {
      if (v[x][i] == y) flag = 1;
    }
  }
  lis.push(x);
}
int main() {
  long long int n;
  cin >> n;
  string s[n];
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      long long int count = 0, p = s[i].length(), q = s[j].length();
      for (int k = 0; k < min(q, p); k++) {
        if (s[i][k] == s[j][k])
          count++;
        else {
          v[s[i][k] - 'a'].push_back(s[j][k] - 'a'),
              m[make_pair(s[i][k] - 'a', s[j][k] - 'a')] = 1;
          break;
        }
      }
      if (count == min(s[i].length(), s[j].length()) && p > q) {
        flag = 1;
        break;
      }
    }
    if (flag) break;
  }
  for (int i = 0; i < 26; i++) {
    if (!visited[i]) dfs(i, i);
  }
  if (flag) {
    cout << "Impossible\n";
    return 0;
  }
  while (lis.size()) {
    cout << (char(lis.top() + 'a'));
    lis.pop();
  }
  return 0;
}
