#include <iostream>
#include <string>
#include <vector>
using namespace std;
string makeLargestPalindrome(string num, int d, int k) {
vector<bool> changed(d, false);
int left = 0, right = d - 1;
int minChanges = 0;
// First pass: Make it a palindrome
while (left < right) {
if (num[left] != num[right]) {
char maxChar = max(num[left], num[right]);
num[left] = num[right] = maxChar;
changed[left] = changed[right] = true;
minChanges++;
}
left++;
right--;
}
if (minChanges > k)
return "-1"; // Not possible to make palindrome within k changes
int remainingChanges = k - minChanges;
left = 0;
right = d - 1;
// Second pass: Maximize palindrome value by changing to '9'
while (left <= right) {
if (left == right) {
if (remainingChanges > 0 && num[left] != '9') {
num[left] = '9';
remainingChanges--;
}
} else {
if (num[left] != '9') {
if (changed[left] || changed[right]) {
if (remainingChanges >= 1) {
num[left] = num[right] = '9';
remainingChanges--;
}
} else {
if (remainingChanges >= 2) {
num[left] = num[right] = '9';
remainingChanges -= 2;
}
}
}
}
left++;
right--;
}
return num;
}
int main() {
int t;
cin >> t;
while (t--) {
int d, k;
cin >> d >> k;
string number;
cin >> number;
string result = makeLargestPalindrome(number, d, k);
cout << result << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RyaW5nIG1ha2VMYXJnZXN0UGFsaW5kcm9tZShzdHJpbmcgbnVtLCBpbnQgZCwgaW50IGspIHsKICAgIHZlY3Rvcjxib29sPiBjaGFuZ2VkKGQsIGZhbHNlKTsKICAgIGludCBsZWZ0ID0gMCwgcmlnaHQgPSBkIC0gMTsKICAgIGludCBtaW5DaGFuZ2VzID0gMDsKCiAgICAvLyBGaXJzdCBwYXNzOiBNYWtlIGl0IGEgcGFsaW5kcm9tZQogICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewogICAgICAgIGlmIChudW1bbGVmdF0gIT0gbnVtW3JpZ2h0XSkgewogICAgICAgICAgICBjaGFyIG1heENoYXIgPSBtYXgobnVtW2xlZnRdLCBudW1bcmlnaHRdKTsKICAgICAgICAgICAgbnVtW2xlZnRdID0gbnVtW3JpZ2h0XSA9IG1heENoYXI7CiAgICAgICAgICAgIGNoYW5nZWRbbGVmdF0gPSBjaGFuZ2VkW3JpZ2h0XSA9IHRydWU7CiAgICAgICAgICAgIG1pbkNoYW5nZXMrKzsKICAgICAgICB9CiAgICAgICAgbGVmdCsrOwogICAgICAgIHJpZ2h0LS07CiAgICB9CgogICAgaWYgKG1pbkNoYW5nZXMgPiBrKQogICAgICAgIHJldHVybiAiLTEiOyAvLyBOb3QgcG9zc2libGUgdG8gbWFrZSBwYWxpbmRyb21lIHdpdGhpbiBrIGNoYW5nZXMKCiAgICBpbnQgcmVtYWluaW5nQ2hhbmdlcyA9IGsgLSBtaW5DaGFuZ2VzOwogICAgbGVmdCA9IDA7CiAgICByaWdodCA9IGQgLSAxOwoKICAgIC8vIFNlY29uZCBwYXNzOiBNYXhpbWl6ZSBwYWxpbmRyb21lIHZhbHVlIGJ5IGNoYW5naW5nIHRvICc5JwogICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHsKICAgICAgICBpZiAobGVmdCA9PSByaWdodCkgewogICAgICAgICAgICBpZiAocmVtYWluaW5nQ2hhbmdlcyA+IDAgJiYgbnVtW2xlZnRdICE9ICc5JykgewogICAgICAgICAgICAgICAgbnVtW2xlZnRdID0gJzknOwogICAgICAgICAgICAgICAgcmVtYWluaW5nQ2hhbmdlcy0tOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKG51bVtsZWZ0XSAhPSAnOScpIHsKICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkW2xlZnRdIHx8IGNoYW5nZWRbcmlnaHRdKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NoYW5nZXMgPj0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBudW1bbGVmdF0gPSBudW1bcmlnaHRdID0gJzknOwogICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDaGFuZ2VzLS07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ2hhbmdlcyA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG51bVtsZWZ0XSA9IG51bVtyaWdodF0gPSAnOSc7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NoYW5nZXMgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGVmdCsrOwogICAgICAgIHJpZ2h0LS07CiAgICB9CgogICAgcmV0dXJuIG51bTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGludCBkLCBrOwogICAgICAgIGNpbiA+PiBkID4+IGs7CiAgICAgICAgc3RyaW5nIG51bWJlcjsKICAgICAgICBjaW4gPj4gbnVtYmVyOwoKICAgICAgICBzdHJpbmcgcmVzdWx0ID0gbWFrZUxhcmdlc3RQYWxpbmRyb21lKG51bWJlciwgZCwgayk7CiAgICAgICAgY291dCA8PCByZXN1bHQgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==