#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define initial first
#define added second
#define sort_all(v) sort(v.begin(), v.end())
#define ya_sayed_ya_badawy \
ios_base::sync_with_stdio(false); \
cin.tie(NULL);
const int MAX = 500 + 50;
int MOD = 1e9 + 7;
const int OO = 1e9;
const double EPS = (double)1e-9;
int add(ll a, ll b)
{
return ((a % MOD) + (b % MOD)) % MOD;
}
int mul(ll a, ll b)
{
return ((a % MOD) * (b % MOD)) % MOD;
}
void solve()
{
int n, a, b, c;
cin >> n >> a >> b >> c;
int total_required = a + b + c;
int max_allowed = (n + 1) / 2;
if (total_required > n || max({a, b, c}) > max_allowed)
{
cout << -1;
return;
}
string res = "";
char last_used = '#';
int required_remaining = total_required;
bool valid = true;
for (int i = 0; i < n; ++i)
{
if (required_remaining > 0)
{
vector<pair<int, char>> candidates;
if (a > 0 && last_used != 'R')
candidates.emplace_back(-a, 'R');
if (b > 0 && last_used != 'G')
candidates.emplace_back(-b, 'G');
if (c > 0 && last_used != 'B')
candidates.emplace_back(-c, 'B');
if (candidates.empty())
{
valid = false;
break;
}
sort_all(candidates);
char chosen = candidates[0].second;
res += chosen;
last_used = chosen;
if (chosen == 'R')
--a;
else if (chosen == 'G')
--b;
else
--c;
--required_remaining;
}
else
{
vector<char> available;
if (last_used != 'R')
available.push_back('R');
if (last_used != 'G')
available.push_back('G');
if (last_used != 'B')
available.push_back('B');
if (available.empty())
{
valid = false;
break;
}
res += available[0];
last_used = available[0];
}
}
if (valid && res.size() == n)
{
for (int i = 1; i < n; ++i)
{
if (res[i] == res[i - 1])
{
valid = false;
break;
}
}
}
if (valid && res.size() == n)
cout << res;
else
cout << -1;
}
signed main()
{
ya_sayed_ya_badawy int t = 1;
cin >> t;
while (t--)
{
solve();
if (t != 0)
{
cout << endl;
}
}
return 0;
}