#include <bits/stdc++.h>
using namespace std;
map<char, set<char> > before;
bool haveCycle(char c) {
  queue<char> pending;
  set<char> checked;
  for (set<char>::iterator it = before[c].begin(); it != before[c].end();
       it++) {
    pending.push(*it);
    checked.insert(*it);
  }
  while (pending.size()) {
    char next = pending.front();
    pending.pop();
    for (set<char>::iterator it = before[next].begin();
         it != before[next].end(); it++) {
      if (*it == c) {
        return true;
      }
      if (checked.count(*it) == 0) {
        before[c].insert(*it);
        checked.insert(*it);
        pending.push(*it);
      }
    }
  }
  return false;
}
int main() {
  int n;
  cin >> n;
  vector<string> words;
  for (int i = 0; i < n; i++) {
    string word;
    cin >> word;
    words.push_back(word);
  }
  bool ok = true;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (words[i] != words[j]) {
        bool checked = false;
        for (int k = 0; k < min(words[i].size(), words[j].size()); k++) {
          if (words[i][k] != words[j][k]) {
            before[words[j][k]].insert(words[i][k]);
            checked = true;
            break;
          }
        }
        if (!checked) {
          if (words[i].size() > words[j].size()) {
            ok = false;
          }
        }
      }
    }
  }
  for (char c = 'a'; c <= 'z'; c++) {
    if (haveCycle(c)) {
      ok = false;
    }
  }
  if (ok) {
    map<char, bool> inserted;
    for (char c = 'a'; c <= 'z'; c++) {
      inserted[c] = false;
    }
    int count = 0;
    string solution;
    while (count != 'z' - 'a' + 1) {
      for (char c = 'a'; c <= 'z'; c++) {
        if ((!inserted[c]) && (before[c].size() == 0)) {
          for (char c2 = 'a'; c2 <= 'z'; c2++) {
            before[c2].erase(c);
          }
          solution += c;
          count++;
          inserted[c] = true;
        }
      }
    }
    cout << solution << endl;
  } else {
    cout << "Impossible" << endl;
  }
}
