#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 7;
const int N = 2e2 + 10;
vector<string> v[N];
int nex[N];
int flag[N];
int main() {
  int n;
  cin >> n;
  map<char, int> mc;
  memset((nex), (-1), sizeof(nex));
  while (n--) {
    string str;
    cin >> str;
    int o = 0;
    for (auto &c : str) {
      mc[c] = 1;
      if (flag[c] == 0) flag[c] = 1;
      if (o >> (c - '0') & 1) {
        puts("NO");
        return 0;
      }
      o |= 1 << (c - '0');
    }
    for (int i = 0; i + 1 < str.length(); i++) {
      if (nex[str[i]] == -1) {
        nex[str[i]] = str[i + 1];
        flag[str[i + 1]] = 2;
      }
      if (nex[str[i]] != str[i + 1]) {
        puts("NO");
        return 0;
      }
    }
  }
  string ans;
  for (int i = 'a'; i <= 'z'; i++) {
    if (flag[i] != 1) continue;
    int c = i;
    while (c != -1 && ans.length() <= mc.size()) {
      ans.push_back(c);
      c = nex[c];
    }
  }
  if (ans.length() != mc.size()) {
    puts("NO");
  } else
    puts(ans.c_str());
  return 0;
}
