#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
ifstream fi("seif.in");
ofstream fo("seif.out");
using pii = pair<int, int>;
const int N = 1024;
int la[N][N], lb[N][N];
char a[N], b[N];
int n, m, k;
bool sm(pii u, pii v) {
if (a[u.x] != b[u.y])
tie(u.x, u.y) = tie(la[u.x][u.y], lb[u.x][u.y]);
if (a[v.x] != b[v.y])
tie(v.x, v.y) = tie(la[v.x][v.y], lb[v.x][v.y]);
while ((u.x > 0 && u.y > 0) && (v.x > 0 && v.y > 0) && u != v) {
if (a[u.x] > a[v.x])
return false;
if (a[u.x] < a[v.x])
return true;
tie(v.x, v.y) = tie(la[v.x][v.y], lb[v.x][v.y]);
tie(u.x, u.y) = tie(la[u.x][u.y], lb[u.x][u.y]); }
if (v.x > 0 || v.y > 0)
return true;
return false; }
void greedy() {
string str;
int len, x, y;
if (a[n] != b[m])
tie(n, m) = tie(la[n][m], lb[n][m]);
len = 0;
tie(x, y) = tie(n, m);
while (x > 0 && y > 0) {
tie(x, y) = tie(la[x][y], lb[x][y]);
++len; }
tie(x, y) = tie(n, m);
while (x > 0 && y > 0) {
while (!str.empty() && len > k && str.back() < a[x])
str.pop_back(), --len;
str.push_back(a[x]);
tie(x, y) = tie(la[x][y], lb[x][y]); }
fo << str << '\n'; }
void solve() {
fi >> k;
fi >> (a + 1) >> (b + 1);
n = strlen(a + 1);
m = strlen(b + 1);
reverse(a + 1, a + n + 1);
reverse(b + 1, b + m + 1);
memset(la, 0x00, sizeof la);
memset(lb, 0x00, sizeof lb);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
if (a[i] == b[j]) {
if (a[i - 1] == b[j - 1]) {
la[i][j] = i - 1;
lb[i][j] = j - 1; }
else {
la[i][j] = la[i - 1][j - 1];
lb[i][j] = lb[i - 1][j - 1]; } }
else {
if (!sm({i - 1, j}, {i, j - 1})) {
if (a[i - 1] == b[j]) {
la[i][j] = i - 1;
lb[i][j] = j; }
else {
la[i][j] = la[i - 1][j];
lb[i][j] = lb[i - 1][j]; } }
else {
if (a[i] == b[j - 1]) {
la[i][j] = i;
lb[i][j] = j - 1; }
else {
la[i][j] = la[i][j - 1];
lb[i][j] = lb[i][j - 1]; } } }
greedy(); }
int main() {
int tsk;
fi >> tsk;
while (tsk--)
solve();
return 0; }