#include <bits/stdc++.h>   const int MAX_N = 1e5 + 5;   int n, m;   char str[MAX_N], nxt[256];   bool chk[256], vis[256], not_root[256], flag;   std::vector<char> ans;   void dfs(char c) {     if (!vis[c]) {       vis[c] = true;       ans.push_back(c);       if (nxt[c]) dfs(nxt[c]);     } else       flag = true;   }   int main() {     scanf( %d , &n);     while (n--) {       scanf(  %s , str);       m = strlen(str);       for (int i = 0; i < m; ++i) chk[str[i]] = true;       for (int i = 0; i + 1 < m; ++i) {         if (nxt[str[i]] == 0)           nxt[str[i]] = str[i + 1];         else if (nxt[str[i]] != str[i + 1]) {           printf( NO n );           return 0;         }         not_root[str[i + 1]] = true;       }     }     for (char i =  a ; i <=  z ; ++i)       if (!not_root[i] && chk[i]) dfs(i);     for (char i =  a ; i <=  z ; ++i) flag |= chk[i] != vis[i];     if (flag) {       printf( NO n );       return 0;     }     for (char c : ans) printf( %c , c);     printf(  n );     return 0;   }   