#include <bits/stdc++.h>
using namespace std;
class A {
 public:
  void solve() {
    int n, m;
    cin >> n >> m;
    vector<vector<char>> g(n, vector<char>(m, '.'));
    for (int i = 0; i < n; i++) {
      if (i % 2 == 0) {
        for (int j = 0; j < m; j++) g[i][j] = '#';
      } else {
        if ((i / 2) % 2 == 0)
          g[i][m - 1] = '#';
        else
          g[i][0] = '#';
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cout << g[i][j];
      cout << '\n';
    }
  }
};
class B {
 public:
  int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
  vector<string> g;
  vector<vector<int>> vis;
  int n, m;
  bool dfs(int x, int y, int fx, int fy) {
    vis[x][y] = -1;
    for (int k = 0; k < 4; k++) {
      int nx = x + dir[k][0];
      int ny = y + dir[k][1];
      if (nx >= 0 && ny >= 0 && nx < n && ny < m && g[nx][ny] == g[x][y]) {
        if (nx != fx || ny != fy) {
          if (vis[nx][ny] == 1) continue;
          if (vis[nx][ny] == -1) return true;
          if (dfs(nx, ny, x, y)) return true;
        }
      }
    }
    vis[x][y] = 1;
    return false;
  }
  void solve() {
    cin >> n >> m;
    g = vector<string>(n);
    vis = vector<vector<int>>(n, vector<int>(m, 0));
    for (int i = 0; i < n; i++) cin >> g[i];
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        if (vis[i][j] == 1) continue;
        if (dfs(i, j, -1, -1)) {
          cout << "Yes" << '\n';
          return;
        }
      }
    cout << "No" << '\n';
  }
};
class C {
 public:
  void solve() {
    int n;
    cin >> n;
    vector<string> g(n);
    for (int i = 0; i < n; i++) cin >> g[i];
    vector<vector<int>> e(26);
    vector<int> indeg(26, 0);
    auto check = [&](string &x, string &y) {
      int len = min(x.size(), y.size());
      for (int i = 0; i < len; i++) {
        if (x[i] != y[i]) {
          indeg[y[i] - 'a']++;
          e[x[i] - 'a'].push_back(y[i] - 'a');
          return true;
        }
      }
      return x.size() <= y.size();
    };
    for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
        if (!check(g[i], g[j])) {
          cout << "Impossible" << '\n';
          return;
        }
      }
    }
    vector<int> res;
    queue<int> q;
    for (int i = 0; i < 26; i++)
      if (indeg[i] == 0) q.push(i);
    while (!q.empty()) {
      int u = q.front();
      q.pop();
      res.push_back(u);
      for (int v : e[u]) {
        indeg[v]--;
        if (indeg[v] == 0) q.push(v);
      }
    }
    if (res.size() != 26)
      cout << "Impossible";
    else
      for (int i : res) cout << (char)(i + 'a');
    cout << '\n';
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  C ans;
  ans.solve();
  return 0;
}
