#include <bits/stdc++.h>
using namespace std;
string solve(int n, int k, vector<string>& arr) {
priority_queue<pair<string, int>> pq;
for (int i = 0; i < n - 1; ++i) {
pq.push({arr[i] + arr[i + 1], i});
}
for (int op = 0; op < k && !pq.empty(); ++op) {
auto top = pq.top();
pq.pop();
string max_concat = top.first;
int pos = top.second;
arr[pos] = max_concat;
arr.erase(arr.begin() + pos + 1);
--n;
if (pos > 0) {
pq.push({arr[pos - 1] + arr[pos], pos - 1});
}
if (pos < arr.size() - 1) {
pq.push({arr[pos] + arr[pos + 1], pos});
}
}
return *max_element(arr.begin(), arr.end());
}
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
vector<string> str(n);
for (int i = 0; i < n; ++i) {
cin >> str[i];
}
cout << solve(n, k, str) << endl;
}
return 0;
}