#include <bits/stdc++.h>
using namespace std;
const int M = 1005;
const int N = 105;
const int C = 26;
vector<int> E[C];
char S[M][N], T[M][N], P[M][N];
int Q[C], deg[C];
bool vis[C];
int n, k;
void add_edge(char *S, char *T) {
  int l1 = strlen(S);
  int l2 = strlen(T);
  for (int k = 0; k < l1 && k < l2; ++k) {
    if (S[k] != T[k]) {
      E[S[k] - 'a'].push_back(T[k] - 'a');
      return;
    }
  }
  if (l2 < l1) {
    puts("IMPOSSIBLE");
    exit(0);
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; ++i) {
    int p;
    scanf("%d", &p);
    for (int j = 0; j < k; ++j) {
      scanf("%s", P[j]);
      int l = strlen(P[j]);
      for (int k = 0; k < l; ++k) vis[P[j][k] - 'a'] = true;
    }
    for (int j = 0; j < k - 1; ++j) add_edge(P[j], P[j + 1]);
    int l1 = strlen(P[0]), l2 = strlen(P[k - 1]);
    for (int j = 0; j < l1; ++j) S[p][j] = P[0][j];
    for (int j = 0; j < l2; ++j) T[p][j] = P[k - 1][j];
  }
  for (int i = 0; i < n - 1; ++i) {
    add_edge(T[i], S[i + 1]);
  }
  int head = 0, tail = 0, cnt = 0;
  for (int u = 0; u < C; ++u) {
    if (vis[u]) ++cnt;
    for (auto v : E[u]) ++deg[v];
  }
  for (int u = 0; u < C; ++u) {
    if (deg[u] == 0 && vis[u]) Q[tail++] = u;
  }
  while (head < tail) {
    int u = Q[head++];
    for (auto v : E[u]) {
      --deg[v];
      if (deg[v] == 0) Q[tail++] = v;
    }
  }
  if (tail != cnt)
    puts("IMPOSSIBLE");
  else {
    for (int i = 0; i < tail; ++i) {
      putchar(Q[i] + 'a');
    }
    putchar('\n');
  }
  return 0;
}
