#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <queue>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
int noOfelement;
int mp[26];
string str,str1,str2;
string output[2000];
int kk;
bool gr[27][27];
stringstream ss;
int elements[26];
set<string> SET;
//ofstream out;
bool check(int elemnt,bool visit[])
{
for(int i=0;i<26;i++)
{
if(gr[i][elemnt] && mp[i]!=-1 && visit[mp[i]]==0)
return 0;
}
return 1;
}
int recur(bool used[],string s)
{
if(s.size()==noOfelement)
{
output[kk++]=s;
return 0;
}
for(int i=0;i<noOfelement;i++)
{
if(used[i]==0 && check(elements[i],used)==1)
{
used[i]=1;
s.append(1u,char(elements[i]+'A'));
recur(used,s);
s.erase(s.begin()+(s.size()-1));
used[i]=0;
}
}
return 0;
}
void topologicalsort()
{
bool visit[noOfelement];
string res = "";
for(int i=0;i<noOfelement;i++)
{
visit[i]=false;
}
for(int i=0;i<noOfelement;i++)
{
if(visit[i]==0 && check(elements[i],visit)==1)
{
visit[i]=1;
res.append(1u,char(elements[i]+'A'));
recur(visit,res);
res.erase(res.begin()+(res.size()-1));
visit[i]=0;
}
}
}
bool cmp(string s1,string s2)
{
int sum = 0;
for(int i=0;i<s1.size();i++)
{
if(s1[i]!=s2[i])
{
return (s1[i]<s2[i]);
}
}
}
int main()
{
int cnt = 0,t;
int a,b;
stringstream ss;
bool first = 0;
char c;
getline(cin,str);
ss<<str;
ss>>t;
ss.clear();
getline(cin,str);
while(t--)
{
getline(cin,str1);
getline(cin,str2);
if(t)
getline(cin,str);
ss.clear();
ss<<str1;
for(int i=0;i<26;i++)
{
mp[i]=-1;
elements[i]=0;
for(int j=0;j<26;j++)
gr[i][j]=0;
}
noOfelement=0;
while(ss>>c)
{
mp[c-'A']=noOfelement;
elements[noOfelement]=c-'A';
noOfelement++;
}
ss.clear();
ss<<str2;
bool f = 0;
char tmp[200];
int char_cnt = 0;
while(ss>>c)
{
if(c>='A' && c<='Z')
tmp[char_cnt++]=c;
}
for(int i=0;i<char_cnt;i++)
{
if(i%2)
{
b = tmp[i]-'A';
gr[a][b]=1;
}
else
a = tmp[i]-'A';
}
kk=0;
topologicalsort();
sort(output+0,output+kk,cmp);
for(int ii=0;ii<kk;ii++)
{
for(int jj=0;jj<output[ii].size();jj++)
cout<<output[ii][jj]<<(jj!=output[ii].size()-1?" ":"\n");
}
if(kk==0)
cout<<"NO\n";
if(t)
cout<<"\n";
}
//out.close();
return 0;
}