#include <bits/stdc++.h>
using namespace std;

bool multicases_=false;
#define int long long

string ans;

map<char,vector<char>>adj;
bool cycle=false;
map<char,int>vis;

void dfs(char node){
	
	vis[node]=1;
	
	//dbg:
	// cerr<<node<<'\n';
	
	for(auto&child:adj[node]){
		if(vis[child]==0){
			dfs(child);
		} else if(vis[child]==1){
			cycle=true;
			return;
		}
	}
	
	
	vis[node]=2;
	ans+=node;
}

void solve(int tc){
	// //dbg:
	 // cerr<<"at the test case no."<<tc<<" : \n";
	
	
	int n;cin>>n;//input
	string s;
	for(int i= 0 ;i <n ; i++){
		cin>>s;
		
		string tmp="";
		tmp+=s[0];
		for(int i = 1; i < (int)s.size(); i++){
			if(s[i]!=s[i-1]){
				tmp+=s[i];
			}
		}
		
		s=tmp;
		
		for(int i = 1 ;i < (int)s.size(); i++){
			adj[s[i-1]].push_back(s[i]);
			
			//dbg <<<<<<<<<<<<<<<<<<<<<<<
			// cerr<<s[i-1]<<" > "<<s[i]<<" , ";
			
		}
		
	}
	
	for(auto&[node,children]:adj){
		if(!vis[node]){
			dfs(node);
		}
		if(cycle) break;
	}
	
	if(!cycle){
		
		reverse(ans.begin(),ans.end());///////////////fix
		
		char c;
		for(int i = 0 ;i <26 ;i++){
			c='a'+i;
			if(!vis[c]) ans+=c;
		}
	}
	
	if(cycle) cout<<"NAO";
	else cout<<"SIM\n"<<ans;
	
	
	// //dbg:
	// for(auto&[node,children]:adj){
		// cerr<<node<<endl;
		// for(auto&child:children) cerr<<child<<' ';
	// }
	
	
}

signed main(){
	ios::sync_with_stdio(0);cin.tie(0);
	
	//pre computations:
	
	
	int tc=1;
	if(multicases_)cin>>tc;
	int total_tcs=tc;
	while(tc--){
		solve(total_tcs-tc);
	}
	return 0;
}