#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:167772160000")
using namespace std;
int k, n;
string s[10000];
string ans;
bool have[30];
bool check(const string &a) {
  pair<int, int> bad = pair<int, int>(-1, -1);
  for (int i = 0; i < (k); i++) {
    if (a[i] == ans[i]) continue;
    if (bad.second != -1) return false;
    bad.second = i;
    if (bad.first == -1) swap(bad.first, bad.second);
  }
  if (bad.first == -1) {
    if (a.length() > 30) return true;
    for (int i = 0; i < (26); i++) have[i] = false;
    for (auto c : a) {
      if (have[c - 'a']) return true;
      have[c - 'a'] = true;
    }
    return false;
  }
  if (bad.second == -1) return false;
  if (ans[bad.first] != a[bad.second]) return false;
  if (a[bad.first] != ans[bad.second]) return false;
  return true;
}
void check() {
  for (int i = 0; i < (n); i++) {
    if (!check(s[i])) return;
  }
  cout << ans << endl;
  exit(0);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < (n); i++) cin >> s[i];
  for (int i = 0; i < (n - 1); i++)
    for (int j = 0; j < (k); j++) {
      if (s[i][j] != s[i + 1][j]) {
        ans = s[i];
        for (int d = 0; d < (k); d++) {
          if (d == j) continue;
          swap(ans[j], ans[d]);
          check();
          swap(ans[j], ans[d]);
        }
        ans = s[i + 1];
        for (int d = 0; d < (k); d++) {
          if (d == j) continue;
          swap(ans[j], ans[d]);
          check();
          swap(ans[j], ans[d]);
        }
        cout << -1;
        return 0;
      }
    }
  n = 1;
  ans = s[0];
  for (int i = 0; i < (k); i++)
    for (int j = i + 1; j < k; j++) {
      swap(ans[i], ans[j]);
      check();
      swap(ans[i], ans[j]);
    }
  cout << -1;
  return 0;
}
