#include <map>
#include <set>
#include <iostream>
#include <vector>
#include <string>
#include <cassert>
#include <cstring>

#define REP(i,m) for(int i=0;i<(m);++i)
#define REPN(i,m,in) for(int i=(in);i<(m);++i)
#define ALL(t) (t).begin(),(t).end()
#define CLR(a) memset((a),0,sizeof(a))
#define pb push_back
#define mp make_pair
#define fr first
#define sc second

using namespace std;


#ifdef DEB
#define dump(x)  cerr << #x << " = " << (x) << endl
#define prl cerr<<"called:"<< __LINE__<<endl
#define dumpR(x) cerr<<"\x1b[31m"<<#x<<" = " <<(x)<<"\x1b[39m"<<endl
#define dumpY(x) cerr<<"\x1b[33m"<<#x<<" = " <<(x)<<"\x1b[39m"<<endl
#define dumpG(x) cerr<<"\x1b[32m"<<#x<<" = " <<(x)<<"\x1b[39m"<<endl
template<class T> void debug(T a,T b){ for(;a!=b;++a) cerr<<*a<<' ';cerr<<endl;}
#else
#define dump(x) ;
#define dumpR(x) ;
#define dumpY(x) ;
#define dumpG(x) ;
#define prl ;
template<class T> void debug(T a,T b){ ;}
#endif

template<class T> bool chmin(T& a,const T& b) {
    if(a>b) {
        a=b;
        return true;
    }
    return false;
}
template<class T> bool chmax(T& a,const T& b) {
    if(a<b){
        a=b;
        return true;
    }
    return false;
}

typedef long long int lint;
typedef pair<lint,lint> pi;

namespace std{
    template<class S,class T>
    ostream &operator <<(ostream& out,const pair<S,T>& a){
        out<<'('<<a.fr<<','<<a.sc<<')';
        return out;
    }
}
typedef vector<bool> vb;

//const int INF=5e8;

int n,n2;
int ask(vector<bool> mask){
    printf("?");
    int cnt=0;
    REP(i,n2){
        if(mask[i]) printf(" %d",i+1),++cnt;
    }
    assert(cnt==n);
    puts("");
    fflush(stdout);


    char res[20];
    scanf("%s",res);
    if(res[0]=='R') return 0;
    if(res[0]=='B') return 1;
    assert(false);
}

vb take_intermediate(vb a, vb b){
    vb res(n2);
    REP(i,n2) res[i]=(a[i] && b[i]);

    int cnt=0;
    REP(i,n2) if(b[i] && !a[i]) ++cnt;
    int take=cnt/2,take2=cnt-take;

    int c0=0,c1=0;
    REP(i,n2) if(b[i] && !a[i]) {
        res[i]=1;
        ++c0;
        if(c0>=take) break;
    }
    REP(i,n2) if(a[i] && !b[i]){
        res[i]=1;
        ++c1;
        if(c1>=take2) break;
    }
    return res;
}
int diff(vb a, vb b){
    int res=0;
    REP(i,n2) if(a[i]!=b[i]) ++res;
    res/=2;
    return res;
}
int main(){
    cin>>n;
    n2=n*2;

    vector<bool> mask0(n2),mask1(n2);
    REP(i,n) mask0[i]=1,mask1[i+n]=1;

    if(ask(mask0)==1) swap(mask0, mask1);

    while(diff(mask0,mask1) > 1){
        vector<bool> intm=take_intermediate(mask0, mask1);
        if(ask(intm)==0) mask0=intm;
        else mask1=intm;
    }

    int ans[205];
    memset(ans,-1,sizeof(ans));

    vector<bool> base(n2);
    REP(i,n2) base[i]=mask0[i]&mask1[i];
    REP(i,n2) if(mask0[i] && !mask1[i]) ans[i]=0;
    REP(i,n2) if(mask1[i] && !mask0[i]) ans[i]=1;

    REP(i,n2) if(base[i]==0 && ans[i]==-1){
        vb a=base;
        a[i]=1;
        ans[i]=ask(a);
    }
    vb base2(n2);
    REP(i,n2) base2[i]=((mask0[i]==0) && (mask1[i]==0));
    REP(i,n2) if(base2[i]==0 && ans[i]==-1){
        vb a=base2;
        a[i]=1;
        ans[i]=ask(a);
    }
    printf("! ");

    REP(i,n2) putchar(ans[i]==0?'R':'B');
    puts("");
    fflush(stdout);
    return 0;
}





Measured memory_bytes: 724