← Home
#include<bits/stdc++.h>
using namespace std;
int T,n,k,to[111],ot[111];
char s[1000006],a[1000006],b[1000006];
void pt(int x,int y){
	ot[to[x]=y]=x;
}
void ut(int x){
	to[x]=ot[to[x]]=0;
}
#define no return false
#define ok return true
#define ty(x) if(!ot[x]){pt(s[i]-96,x);if(dfs(i+1,dw&&x==lw,up&&x==ud)) ok;ut(s[i]-96);}
bool dfs(int i,bool dw=1,bool up=1){
	if(i==n+1||!(dw||up)) ok;
	int lw=dw?a[i]-96:0,ud=up?b[i]-96:k+1,o=to[s[i]-96];
	if(o){
		if(o<lw||o>ud) no;
		return dfs(i+1,dw&&o==lw,up&&o==ud); 
	}
	if(max(lw,1)==min(ud,k)){
		ty(max(lw,1));
		no;
	}
	for(int j=lw+1;j<ud;j++) ty(j);
	ty(lw);
	ty(ud);
	no;
}
void doing(){
	scanf("%d %s %s %s",&k,s+1,a+1,b+1);
	n=strlen(a+1);
	for(int i=1;i<=k+2;i++) ot[i]=to[i]=0;
	ot[0]=ot[k+1]=-1;
	if(!dfs(1)) return puts("NO"),void();
	for(int i=1,j=1;i<=k;i++){
		while(ot[j]) j++;
		if(!to[i]) pt(i,j);
	}
	puts("YES");
	for(int i=1;i<=k;i++) putchar(to[i]+96);
	putchar('\n');
}
int main(){
	cin>>T;
	while(T--) doing();
}