#include <bits/stdc++.h>   using namespace std;   bool flag = 0;   void dfs(int u, vector<vector<int> > &g, vector<int> &mark, string &order) {     mark[u] = 1;     for (auto to : g[u]) {       if (mark[to] == 1)         flag = 1;       else if (mark[to] == 0)         dfs(to, g, mark, order);     }     order.push_back( a  + u);     mark[u] = 2;   }   int main() {     ios::sync_with_stdio(0);     int n;     cin >> n;     vector<string> a(n);     for (int i = 0; i < n; i++) cin >> a[i];     vector<vector<int> > g(26);     for (int i = 0; i < n - 1; i++) {       int size = min((int((a[i]).size())), (int((a[i + 1]).size()))), j;       for (j = 0; j < size; j++)         if (a[i][j] != a[i + 1][j]) break;       if (j < size)         g[a[i][j] -  a ].push_back(a[i + 1][j] -  a );       else if ((int((a[i]).size())) > (int((a[i + 1]).size())))         flag = 1;     }     vector<int> mark(26);     string order;     for (int i = 0; i < 26; i++)       if (mark[i] == 0) dfs(i, g, mark, order);     if (flag) {       cout <<  Impossible n ;     } else {       reverse(order.begin(), order.end());       cout << order <<   n ;     }     return 0;   }   