#include <bits/stdc++.h>
int take() {
  int n;
  scanf("%d", &n);
  return n;
}
double ttake() {
  double n;
  scanf("%lf", &n);
  return n;
}
long long takes() {
  long long n;
  scanf("%lld", &n);
  return n;
}
int cas;
using namespace std;
bool approximatelyEqual(float a, float b, float epsilon) {
  return fabs(a - b) <= ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool essentiallyEqual(float a, float b, float epsilon) {
  return fabs(a - b) <= ((fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool definitelyGreaterThan(float a, float b, float epsilon) {
  return (a - b) > ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool definitelyLessThan(float a, float b, float epsilon) {
  return (b - a) > ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
stack<int> stk;
bool nw[200005];
int ans[27], t, cnt[27];
vector<int> v1[27], v2[27];
void dfs(int x) {
  nw[x] = 1;
  for (int u : v1[x]) {
    if (!nw[u]) {
      dfs(u);
    }
  }
  stk.push(x);
}
void dfs2(int x) {
  nw[x] = 1;
  for (int u : v2[x]) {
    if (!nw[u]) {
      dfs2(u);
    }
  }
  t++;
  ans[t] = x;
  cnt[x] = t;
}
void impos() { printf("Impossible\n"); }
int main() {
  int tc = 1;
  while (tc--) {
    int n = take(), len = 0;
    string save[n + 1];
    cin >> save[1];
    for (int i = 2; i <= n; i += 1) {
      cin >> save[i];
      int ind = 0;
      while (ind < save[i].size() && save[i][ind] == save[i - 1][ind]) ind++;
      if (save[i].size() != ind && save[i - 1].size() != ind) {
        v1[save[i - 1][ind] - 96].push_back(save[i][ind] - 96);
        v2[save[i][ind] - 96].push_back(save[i - 1][ind] - 96);
      } else if (save[i].size() == ind) {
        impos();
        { return 0; };
      }
    }
    for (int i = 1; i <= 26; i += 1) {
      if (!nw[i]) dfs(i);
    }
    memset(nw, 0, sizeof nw);
    while (!stk.empty()) {
      int tp = stk.top();
      stk.pop();
      if (nw[tp]) continue;
      dfs2(tp);
    }
    for (int i = 2; i <= n; i += 1) {
      int ind = 0;
      while (ind < save[i].size() &&
             cnt[save[i][ind] - 96] == cnt[save[i - 1][ind] - 96])
        ind++;
      if (ind < save[i - 1].size() &&
          cnt[save[i - 1][ind] - 96] > cnt[save[i][ind] - 96]) {
        impos();
        { return 0; };
      }
    }
    for (int i = 1; i <= 26; i += 1) printf("%c", ans[i] + 96);
  }
  { return 0; };
}
