https://vjudge.net/problem/24768/origin
#include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#include<iomanip>
#include<algorithm>
#include<stack>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
vector<char> v[5];
set<char>s1[5];
set<char>s2[5];
int cnt;
int k;
string s;
void dfs(int j)
{
if(j==5)
{
cnt++;
//cout<<cnt<<":"<<s<<" ";
if(cnt==k){cout<<s<<endl;return;}
}
string temp=s;
int len=v[j].size();
for(int i=0;i<len;i++)
{
s+=v[j][i];
dfs(j+1);
s=temp;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLIN
int T;
cin>>T;
while(T--)
{
for(int j=0;j<5;j++)s1[j].clear(),s2[j].clear();
for(int j=0;j<5;j++)v[j].clear();
cin>>k;
char ch;
for(int i=0;i<6;i++)
for(int j=0;j<5;j++)
{
cin>>ch;
s1[j].insert(ch);
}
for(int i=0;i<6;i++)
for(int j=0;j<5;j++)
{
cin>>ch;
s2[j].insert(ch);
}
for(int j=0;j<5;j++)
{
set<char>::iterator it=s1[j].begin();
while(it!=s1[j].end())
{
if(s2[j].count(*it))
{
v[j].push_back(*it);
}
it++;
}
}
for(int j=0;j<5;j++)sort(v[j].begin(),v[j].end());
int total=v[0].size()*v[1].size()*v[2].size()*v[3].size()*v[4].size();
if(k>total)
{
cout<<"NO"<<endl;continue;
}
s="";
cnt=0;
dfs(0);
}
}