#include <bits/stdc++.h>
#define Nmax 1005
using namespace std;
char a[Nmax],b[Nmax],ans[Nmax];
int n,m,k,dp[Nmax][Nmax],dpmx[Nmax][Nmax];
int nxt[Nmax][26];
inline void Solve()
{
int p1=1,p2=1,need=k,i,l=0;
while(p1<=n && p2<=m)
{
int mx=-1,p=0;
for(i=p1;i<=n;++i)
if(dp[i][p2]>=max(need,1) && mx < a[i]-'A')
{
mx=a[i]-'A'; p=i;
}
if(!p) break;
ans[++l]=char(mx+'A');
p1=p+1;
for(;b[p2]!=a[p];++p2);
++p2;
--need;
}
ans[l+1]='\0';
}
int main()
{
int T,i,j;
ifstream cin("seif.in");
ofstream cout("seif.out");
cin>>T;
while(T--)
{
cin>>k>>(a+1)>>(b+1);
n=strlen(a+1);
m=strlen(b+1);
for(i=0;i<26;++i) nxt[m+1][i]=0;
for(i=m;i;--i)
{
for(j=0;j<26;++j) nxt[i][j]=nxt[i+1][j];
nxt[i][b[i]-'A']=i;
}
for(i=0;i<=n+1;++i)
for(j=0;j<=m+1;++j) dp[i][j]=dpmx[i][j]=0;
for(i=n;i;--i)
for(j=m;j;--j)
{
int poz=nxt[j][a[i]-'A'];
dp[i][j]=(poz>0)*(dpmx[i+1][poz+1]+1);
dpmx[i][j]=max(dp[i][j],dpmx[i+1][j]);
}
Solve();
cout<<(ans+1)<<"\n";
}
return 0;
}