#include #include #include #include #include using namespace std; void solve(set &deadends, string &state, vector &result, int depth) { if(depth == 0) throw result; if(deadends.count(state)) return; --depth; // cout << state << endl; int pos; // h, _GB -> BG_ if((pos = state.find(" GB")) != string::npos){ state.replace(pos, 3, "BG "); result.push_back('h'); solve(deadends, state, result, depth); result.pop_back(); state.replace(pos, 3, " GB"); } // H, GB_ -> _BG if((pos = state.find("GB ")) != string::npos){ state.replace(pos, 3, " BG"); result.push_back('H'); solve(deadends, state, result, depth); result.pop_back(); state.replace(pos, 3, "GB "); } // s, _B -> B_ if((pos = state.find(" B")) != string::npos){ state.replace(pos, 2, "B "); result.push_back('s'); solve(deadends, state, result, depth); result.pop_back(); state.replace(pos, 2, " B"); } // S, G_ -> _G if((pos = state.find("G ")) != string::npos){ state.replace(pos, 2, " G"); result.push_back('S'); solve(deadends, state, result, depth); result.pop_back(); state.replace(pos, 2, "G "); } deadends.insert(state); return; } int main(void) { ifstream cin("kindergarten.in"); int N; cin >> N; for(int ncases = 0; ncases < N; ++ncases){ int nprob, ngirls, nboys; cin >> nprob >> ngirls >> nboys; set de; string state = string(ngirls, 'G') + ' ' + string(nboys, 'B'); vector result; try{ solve(de, state, result, ngirls * nboys + ngirls + nboys); }catch(vector &s){ cout << nprob << " " << s.size() << endl; for(int i = 0; i < s.size(); ++i){ if(i != 0 && i % 50 == 0) cout << endl; cout << s[i]; } cout << endl; } } return 0; }