#include<bits/stdc++.h>

#define HEAP priority_queue
#define rep(i, n) for(int i = 0, _end_ = (n); i < _end_; ++i)
#define per(i, n) for(int i = (n) - 1; i >= 0 ; --i)
#define forn(i, l, r) for(int i = (l), _end_ = (r); i <= _end_; ++i)
#define nrof(i, r, l) for(int i = (r), _end_ = (l); i >= _end_; --i)
#define FOR(a, b) for(auto (a): (b))
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define X first
#define Y second
#define eps 1e-6
#define pi 3.1415926535897932384626433832795
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(), x.end()

using namespace std;

typedef long long LL;
typedef double flt;
typedef vector<int> vi;
typedef vector<LL> vl;
typedef pair<int,int> pii;
typedef pair<int,LL> pil;
typedef pair<LL,int> pli;
typedef pair<LL,LL> pll;
typedef vector<pil> vil;
typedef vector<pii> vii;
typedef vector<pli> vli;
typedef vector<pll> vll;

const int iinf = 1e9 + 7;
const int oo = 0x3f3f3f3f;
const LL linf = 1ll << 60;
const flt dinf = 1e60;

template <typename T> inline void scf(T &x) {
	bool f = 0;
	x = 0;
	char c = getchar();
	while(c != '-' && (c < '0' || c > '9')) c = getchar();
	if(c == '-') f = 1, c = getchar();
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	if(f) x = -x;
	return;
}

template <typename T1, typename T2> void scf(T1 &x, T2 &y) {
	scf(x);
	return scf(y);
}

template <typename T1, typename T2, typename T3> void scf(T1 &x, T2 &y, T3 &z) {
	scf(x);
	scf(y);
	return scf(z);
}

template <typename T1, typename T2, typename T3, typename T4> void scf(T1 &x, T2 &y, T3 &z, T4 &w) {
	scf(x);
	scf(y);
	scf(z);
	return scf(w);
}

inline char mygetchar() {
	char c = getchar();
	while(c == ' ' || c == '\n') c = getchar();
	return c;
}

template <typename T> inline bool chkmax(T &x, const T &y) {
	return y > x ? x = y, 1 : 0;
}

template <typename T> inline bool chkmin(T &x, const T &y) {
	return y < x ? x = y, 1 : 0;
}

#ifdef King_George
#define DEBUG
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define debug(...)
#endif

//---------------------------------------------------------head----------------------------------------------------

inline bool check(long long A, long long B, long long k) {
	long long C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	return C <= B + 1 && D <= A + 1;
}

inline bool checkA(long long A, long long B, long long k) {
	if(!check(A, B, k)) {
		return 0;
	}
	long long C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	return D <= A;
}

inline bool checkB(long long A, long long B, long long k) {
	if(!check(A, B, k)) {
		return 0;
	}
	long long C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	return C <= B;
}

inline void solve(long long A, long long B, long long L, long long R) {
	long long lb = 1, rb = max(A, B);
	while(lb <= rb) {
		long long mid = lb + rb >> 1;
		if(check(A, B, mid)) {
			rb = mid - 1;
		}
		else {
			lb = mid + 1;
		}
	}
	long long k = lb;
	debug("%d\n", k);
	if(!checkA(A, B, k)) {
		long long fuck = B % k;
		if(!fuck) {
			fuck = k;
		}
		forn(i, max(L, 1ll), min(fuck, R)) {
			putchar('B');
		}
		L -= fuck;
		R -= fuck;
		if(R < 0) {
			return;
		}
		if(L <= 0) {
			L = 1;
		}
		long long t = L / (k + 1);
		L -= t * (k + 1);
		R -= t * (k + 1);
		forn(i, L, R) {
			putchar((i % (k + 1) == 1) ? 'A' : 'B');
		}
		return;
	}
	long long C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	lb = 0, rb = A + B;
	while(lb <= rb) {
		long long mid = lb + rb >> 1;
		long long a = (long long) A - (long long) mid * k, b = B - mid;
		if(checkA(a, b, k)) {
			lb = mid + 1;
		}
		else {
			rb = mid - 1;
		}
	}
	long long foo = rb, x = 0;
	assert(foo >= -1);
	if(foo != -1) {
		if((long long) foo * (k + 1) >= (long long) (A + B)) {
			long long t = L / (k + 1);
			L -= t * (k + 1);
			R -= t * (k + 1);
			forn(i, L, R) {
				putchar((i % (k + 1) == 0) ? 'B' : 'A');
			}
			return;
		}
		x = (k + 1) * foo;
		for (long long i = L; i <= R && i <= x; ++i) {
			putchar((i % (k + 1) == 0) ? 'B' : 'A');
		}
		if(x >= R) {
			return;
		}
		A -= foo * k;
		B -= foo;
	}
	debug("%d %d\n", A, B);
	C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	long long ll = x + 1, rr = x + (A - (D - 1));
	forn(i, max(ll, L) ,min(rr, R)) {
		putchar('A');
	}
	x = rr;
	if(x >= R) {
		return;
	}
	A = D - 1;
	C = A / k, D = B / k;
	if(C * k < A) {
		++C;
	}
	if(D * k < B) {
		++D;
	}
	lb = 1, rb = k;
	while(lb <= rb) {
		long long mid = lb + rb >> 1;
		if(checkA(A, B - mid, k)) {
			rb = mid - 1;
		}
		else {
			lb = mid + 1;
		}
	}
	foo = lb;
	ll = x + 1, rr = x + foo;
	forn(i, max(ll, L) ,min(rr, R)) {
		putchar('B');
	}
	x = rr;
	if(x >= R) {
		return;
	}
	B -= foo;
	D = B / k;
	if(D * k < B) {
		++D;
	}
	debug("%d %d\n", A, B);
	long long t = (L - x - 1) / (k + 1);
	if(t < 0) {
		t = 0;
	}
	x += t * (k + 1);
	for(;;) {
		forn(i, max(x + 1, L), min(x + k + 1, R)) {
			if(i == x + 1) {
				putchar('A');
			}
			else {
				putchar('B');
			}
		}
		x += k + 1;
		if(x >= R) {
			return;
		}
	}
}

int main() {
	long long Q;
	scf(Q);
	while(Q--) {
		long long A, B, C, D;
		scf(A, B, C, D);
		solve(A, B, C, D);
		putchar('\n');
	}
	return 0;
}

Measured memory_bytes: 384