#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n;
char s[128][128];
int len[128];
int a[128],ins[26];
bool mp[26][26],used[26];
char ans[32];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%s",s[i]);
for(int i=1;i<=n;i++)
{
int temp;
scanf("%d",&temp);
a[i]=temp;
len[i]=strlen(s[temp]);
}
for(int i=1;i<n;i++)
{
int j=0;
while(j<len[i]&&j<len[i+1]&&s[a[i]][j]==s[a[i+1]][j])
j++;
if(j>=len[i])
continue;
if(j>=len[i+1]&&j<len[i])
{
printf("NE");
return 0;
}
if(!mp[s[a[i]][j]-'a'][s[a[i+1]][j]-'a'])
mp[s[a[i]][j]-'a'][s[a[i+1]][j]-'a']=1,ins[s[a[i+1]][j]-'a']++;
}
queue<int>q;
int tot=0;
for(int i=0;i<26;i++)
if(!ins[i])
q.push(i),used[i]=true;
while(q.size())
{
int now=q.front();
q.pop();
ans[tot++]=now+'a';
for(int i=0;i<26;i++)
{
if(mp[now][i])
ins[i]--;
if(!ins[i]&&!used[i])
q.push(i),used[i]=true;
}
}
for(int i=0;i<26;i++)
if(!used[i])
{
printf("NE");
return 0;
}
printf("DA\n%s",ans);
return 0;
}
60分,不知道错哪里了