#include<bits/stdc++.h>
using namespace std;
void rd(int &x){
  int k, m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    putchar_unlocked(c[i]);
  }
}
template<class S, class T> inline S min_L(S a,T b){
  return a<=b?a:b;
}
template<class S, class T> inline S max_L(S a,T b){
  return a>=b?a:b;
}
template<class S, class T> inline S divup_L(S a, T b){
  return (a+b-1)/b;
}
template<class S, class T> inline S chmax(S &a, T b){
  if(a<b){
    a=b;
  }
  return a;
}
char res[111];
int A, B, C, D, Q;
char solve(int A, int B, int C){
  int A1, A2, B1, B2, i, j, k, mx;
  if(A==B || A==B+1){
    if(C%2==0){
      return 'A';
    }
    return 'B';
  }
  if(A==B-1){
    if(C%2==0){
      return 'B';
    }
    return 'A';
  }
  mx = divup_L((max_L(A, B)),(min_L(A, B)+1));
  i = 0;
  j = B;
  while(i < j){
    k = (i+j+1) / 2;
    if((long long)mx*k > A){
      j = k-1;
      continue;
    }
    if((long long)mx*(A-mx*k) < B-k){
      j = k-1;
      continue;
    }
    i = k;
  }
  A1 = mx*i;
  B1 = i;
  A2 = A - A1;
  B2 = B - B1;
  if(C < A1+B1){
    if(C%(mx+1)==mx){
      return 'B';
    }
    return 'A';
  }
  C -= A1 + B1;
  A1 = A2 - B2/mx;
  B1 = B2 % mx;
  if(C < A1){
    return 'A';
  }
  C -= A1;
  if(C < B1){
    return 'B';
  }
  C -= B1;
  if(C%(mx+1)==0){
    return 'A';
  }
  return 'B';
}
int main(){
  int cTE1_r3A, i, j, k;
  for(;0;){
    int Q5VJL1cS, con, conm, e98WHCEY, mx=1000;
    string opt, str, tmp;
    A = rand()%10 + 1;
    B = rand()%10 + 1;
    str = "";
    for(Q5VJL1cS=0;Q5VJL1cS<A;Q5VJL1cS++){
      str += 'A';
    }
    for(e98WHCEY=0;e98WHCEY<B;e98WHCEY++){
      str += 'B';
    }
    do{
      conm = con = 1;
      for(i=1;i<str.size();i++){
        if(str[i]==str[i-1]){
          con++;
        }
        else{
          con = 1;
        }
        chmax(conm, con);
      }
      if(mx > conm){
        opt = str;
        mx = conm;
      }
    }
    while(next_permutation(str.begin(), str.end()));
    tmp = "";
    for(i=0;i<A+B;i++){
      tmp += solve(A,B,i);
    }
    printf("%d %d %s %s\n", A, B, opt.c_str(), tmp.c_str());
    assert(opt==tmp);
  }
  rd(Q);
  for(cTE1_r3A=0;cTE1_r3A<Q;cTE1_r3A++){
    rd(A);
    rd(B);
    rd(C);
    rd(D);
    k = 0;
    for(i=C-1;i<D;i++){
      res[k++] = solve(A,B,i);
    }
    res[k] = '\0';
    wt_L(res);
    putchar_unlocked('\n');
  }
  return 0;
}
// cLay varsion 20180108-2

// --- original code ---
// int Q, A, B, C, D;
// char res[111];
// 
// 
// char solve(int A, int B, int C){
//   int i, j, k, mx;
//   int A1, B1, A2, B2;
// 
//   if(A==B || A==B+1){
//     if(C%2==0) return 'A';
//     return 'B';
//   }
//   if(A==B-1){
//     if(C%2==0) return 'B';
//     return 'A';
//   }
// 
//   mx = (max(A,B)) /+ (min(A,B)+1);
//   i = 0; j = B;
//   while(i < j){
//     k = (i+j+1) / 2;
//     if((ll)mx*k > A){ j = k-1; continue; }
//     if((ll)mx*(A-mx*k) < B-k){ j = k-1; continue; }
//     i = k;
//   }
// 
//   A1 = mx*i;
//   B1 = i;
//   A2 = A - A1;
//   B2 = B - B1;
// 
//   if(C < A1+B1){
//     if(C%(mx+1)==mx) return 'B';
//     return 'A';
//   }
//   C -= A1 + B1;
// 
//   A1 = A2 - B2/mx;
//   B1 = B2 % mx;
//   if(C < A1) return 'A';
//   C -= A1;
//   if(C < B1) return 'B';
//   C -= B1;
//   if(C%(mx+1)==0) return 'A';
//   return 'B';
// }
// 
// {
//   int i, j, k;
// 
//   for(;0;){
//     A = rand()%10 + 1;
//     B = rand()%10 + 1;
// 
//     int mx = 1000, con, conm;
//     string str, opt, tmp;
//     str = "";
//     rep(A) str += 'A';
//     rep(B) str += 'B';
// 
//     do{
//       conm = con = 1;
//       REP(i,1,str.size()){
//         if(str[i]==str[i-1]) con++;
//         else con = 1;
//         conm >?= con;
//       }
//       if(mx > conm) opt = str, mx = conm;
//     }while(next_permutation(str.begin(), str.end()));
// 
//     tmp = "";
//     rep(i,A+B) tmp += solve(A,B,i);
// 
//     printf("%d %d %s %s\n", A, B, opt.c_str(), tmp.c_str());
//     assert(opt==tmp);
//   }
// 
//   rd(Q);
//   rep(Q){
//     rd(A,B,C,D);
//     k = 0;
//     rep(i,C-1,D) res[k++] = solve(A,B,i);
//     res[k] = '\0';
//     wt(res);
//   }
// }


Measured memory_bytes: 384