#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
string s[maxn+1];
int n;
int a[maxn+1];
int color[30];
vector<int>adj[30];
int id=26;
int t[30];
char ans[30];
int findDiff(int u,int v){
int x=s[u].size();
int y=s[v].size();
for(int i=0;i<min(x,y);++i){
if(s[u][i]!=s[v][i]) return i;
}
return -1;
}
bool DAG=true;
void dfs(int u){
color[u]=1;
for(int v:adj[u]){
if(color[v]==0){
dfs(v);
}
else if(color[v]==1){
DAG=false;
}
}
t[--id]=u;
color[u]=2;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i=1;i<=n;++i) cin >> s[i];
for(int i=1;i<=n;++i) cin >> a[i];
for(int i=1;i<n;++i){
int pos=findDiff(a[i],a[i+1]);
if(pos==-1){
// ! de dieu kien duoi day ra ngoai vong if tren thi sai logic
if(s[a[i]].size()>s[a[i+1]].size()){
cout << "NE";
return 0;
}
}
else{
int x=s[a[i]][pos]-'a';
int y=s[a[i+1]][pos]-'a';
adj[x].push_back(y);
}
}
for(int i=0;i<26;++i){
if(!color[i]) dfs(i);
}
if(!DAG){
cout << "NE";
return 0;
}
cout << "DA\n";
for(int i=0;i<26;++i){
ans[t[i]]=char('a'+i);
}
for(int i=0;i<26;++i) cout << ans[i];
}
// viec if rat quan trong !
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |