#include using namespace std; int main() { int T; cin >> T; assert(T >= 1 && T <= 50); while (T--) { string s; cin >> s; assert(s.size() >= 1 && s.size() <= 100000); int a, b; cin >> a >> b; int A = a, B = b; assert(a >= 1 && a <= s.size()); assert(b >= 1 && b <= s.size()); int cntA = 0, cntB = 0; for (char ch: s) { if (ch == 'a') { cntA++; } else if (ch == 'b') { cntB++; } else { assert(false); } } char first = 'a', second = 'b'; if ((cntA + a - 1) / a <= (cntB + b - 1) / b) { swap(first, second); swap(a, b); swap(cntA, cntB); } vector > parts; int remA = cntA, remB = cntB; int a_parts = (cntA + a - 1) / a; for (int i = 0; i < (cntA + a - 1) / a; i++) { parts.push_back({first, min(a, remA)}); remA -= min(a, remA); if (remB > 0) { parts.push_back({second, 1}); remB--; } else if (i + 1 < a_parts) { parts.push_back({'*', 1}); } } assert(remA == 0); for (int i = 1; i < parts.size(); i += 2) { parts[i].second += min(remB, b - 1); remB -= min(remB, b - 1); } assert(remB == 0); string ans = ""; for (auto it: parts) { for (int i = 0; i < it.second; i++) { ans += it.first; } } /* cerr << "s " << s << endl; cerr << "a " << a << " " << " b " << b << endl; cerr << "ans " << ans << endl; */ int cA = 0, cB = 0; for (int i = 0; i < ans.size(); i++) { if (ans[i] == 'a') { cA++; cB = 0; } else if (ans[i] == 'b') { cB++; cA = 0; } else { cA = cB = 0; } assert(cA <= A && cB <= B); } cout << ans << endl; } return 0; }