【题目分析】
后缀积的使用。
【代码】
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
vector<char> v[7];
char s1[10][10],s2[10][10];
int k,n[7];
bool init()
{
int i,j,x,y,z;
for (i=1;i<=5;i++) v[i].clear();
scanf("%d",&k);
for (i=1;i<=6;i++)
scanf("%s",s1[i]+1);
for (i=1;i<=6;i++)
scanf("%s",s2[i]+1);
for (i=1;i<=5;i++)
for (j=1;j<=6;j++)
for (x=1;x<=6;x++)
if (s1[j][i]==s2[x][i])
v[i].push_back(s1[j][i]);
for (i=1;i<=5;i++)
{
if (v[i].empty()) return 0;
sort(v[i].begin(),v[i].end());
unique(v[i].begin(),v[i].end());
n[i]=0;
while (n[i]<v[i].size()-1&&v[i][n[i]+1]>v[i][n[i]]) n[i]++;
n[i]++;
}
return 1;
}
void solve()
{
int i,j,x,y,z,tot=1;
for (i=1;i<=5;i++)
tot*=n[i];
if (k>tot)
{
printf("NO\n");
return;
}
/*for (i=1;i<=5;i++)
{
tot/=n[i];
j=k/(tot+1);
printf("%c",v[i][j]);
k-=j*tot;
}*/
k--;
for (i=1;i<=5;i++)
{
tot/=n[i];
j=k/tot;
printf("%c",v[i][j]);
k-=j*tot;
}
printf("\n");
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
if (!init())
{
printf("NO\n");
continue;
}
solve();
}
}