#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:251700000")
using namespace std;
const int INF = 2e9;
const double eps = 1e-6;
const int M = 1e5 + 5;
int n;
string s[M];
bool us[M];
char SS[M];
string get_s() {
  scanf(" %s", &SS);
  return string(SS);
}
int main() {
  scanf("%d", &n);
  vector<int> c(27);
  vector<int> dd(27, -1);
  for (int q = 0; q < n; ++q) {
    s[q] = get_s();
    for (int i = 0; i < 27; ++i) c[i] = 0;
    for (int j = 0; j < s[q].size(); ++j) ++c[s[q][j] - 'a'];
    for (int i = 0; i < 27; ++i)
      if (c[i] > 1) cout << "NO", exit(0);
    for (int i = 0; i < 27; ++i) {
      if (dd[i] == -1 || !c[i] || us[dd[i]]) continue;
      int l, r, l1, r1;
      for (int j = 0; j < s[q].size(); ++j)
        if (s[q][j] - 'a' == i) l = j;
      for (int j = 0; j < s[dd[i]].size(); ++j)
        if (s[dd[i]][j] - 'a' == i) r = j;
      l1 = l, r1 = r;
      while (l >= 0 && r >= 0) {
        if (s[q][l] != s[dd[i]][r]) cout << "NO", exit(0);
        --l, --r;
      }
      if (r >= 0) s[q] = s[dd[i]].substr(0, r + 1) + s[q], l1 += r + 1;
      l = l1, r = r1;
      while (l < s[q].size() && r < s[dd[i]].size()) {
        if (s[q][l] != s[dd[i]][r]) cout << "NO", exit(0);
        ++l, ++r;
      }
      while (r < s[dd[i]].size()) {
        s[q] += s[dd[i]][r];
        ++r;
      }
      us[dd[i]] = 1;
    }
    for (int i = 0; i < 27; ++i) c[i] = 0;
    for (int j = 0; j < s[q].size(); ++j)
      ++c[s[q][j] - 'a'], dd[s[q][j] - 'a'] = q;
    for (int i = 0; i < 27; ++i)
      if (c[i] > 1) cout << "NO", exit(0);
  }
  vector<string> ab;
  for (int i = 0; i < n; ++i)
    if (!us[i]) ab.push_back(s[i]);
  sort((ab).begin(), (ab).end());
  for (int i = 0; i < ab.size(); ++i) cout << ab[i];
}
