#include <algorithm>
#include <iostream>
#include <set>
#include <stack>
using namespace std;

set<int> in[256],out[256];
char str[200'000];


int main(){
	set<int> vis;
	int N;
	cin>>N;
	while(N--){
		cin>>str;
		for(int i=0;str[i];i++){
			vis.insert(str[i]);
			if(i){
				in[str[i]].insert(str[i-1]);
				out[str[i-1]].insert(str[i]);
			}
		}
	}
	//fill(str,str+200'000,0);
	for(auto i: vis)
		if(in[i].size()>1 || out[i].size()>1) {
			cout<<"NO\n";
			return 0;
		}
	int c=0;
	
	stack<int> ST;
	for(set<int>::reverse_iterator i=vis.rbegin();
		i!=vis.rend();i++)
		if(in[*i].size()==0)
		ST.push(*i);
	
	while(!ST.empty()){
		int i=ST.top(); ST.pop();
		str[c++]=i;
		vis.erase(i);
		
		for(auto j: out[i]){
			in[j].erase(i);
			if(in[j].size()==0)ST.push(j);
		}
	}
	
	if(vis.size()) cout<<"NO\n";
	
	str[c]=0;
	cout<<str<<endl;
	return 0;
}