#include<bits/stdc++.h>
const int mod=3,N=600005;
using namespace std;

struct nd{
	int a,b;
	nd(int k=1){b=0;if(k)while(k%mod==0)k/=mod,b++;a=k%mod;}
	nd(int A,int B){a=A,b=B;}
	nd operator*(nd c){
		nd as=(nd){a*c.a%mod,b+c.b};
		return as;
	}
	nd operator/(nd c){
		nd as=(nd){a*c.a%mod,b-c.b};
		return as;
	}
	int operator~(){return b?0:a;}
}nw;

int a[N],n,ans;
char S[N];

int main(){
	a['R']=0,a['W']=1,a['B']=2; 
	scanf("%d%s",&n,S+1);
	for(int i=1;i<=n;i++){
		ans+=~nw*a[S[i]];
		nd x(n-i),y(i);
		nw=nw*x/y;
	}
	if(!(n&1))ans=ans*2;
	if(ans%3==0)printf("R");
	else if(ans%3==1)printf("W");
	else printf("B"); 
}
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

#include <bits/stdc++.h>
using namespace std;

/*
    前処理: O(MAX_N*MAX_N)
    nCk(n,k): nCk の計算。O(1)
*/
const int MAX_N = 60;         // n の最大値
vector<vector<long long>> com;  // 前計算の結果を保存

// 動的計画法で前処理
void init() {
    com.assign(MAX_N, vector<long long>(MAX_N));
    com[0][0] = 1;
    for (int i = 1; i < MAX_N; ++i) {
        com[i][0] = 1;
        for (int j = 1; j < MAX_N; j++) {
            com[i][j] = (com[i - 1][j - 1] + com[i - 1][j]);
        }
    }
}
// nCk を取得
long long nCk(int n, int k) {
    assert(!(n < k));
    assert(!(n < 0 || k < 0));
    return com[n][k];
}

  

int main(){
  ll A,B;
  ll K;
  cin>>A>>B>>K;
  init();
  string ANS="";
  while(A>0LL && B>0LL){
    //cout << A << " " << B << " " << K << endl;
    if(K <= nCk(A+B-1LL,B)){
      ANS = ANS +'a';
      A--;
    }
    else{
      ANS = ANS + 'b';
      K -= nCk(A+B-1LL,B);
      B--;
    }
  }
  if(A == 0LL){
    for(int i=0;i<(int)B;i++){
      ANS = ANS + 'b';
    }
  }
  else if(B == 0LL){
    for(int i=0;i<(int)A;i++){
      ANS = ANS + 'a';
    }
  }
  cout << ANS << endl;
}