//#define DEBUG

#include <bits/stdc++.h>
#define gc getchar_unlocked()
#define pc(x) putchar_unlocked(x)
template<typename T> void scan(T &x){x = 0;bool _=0;T c=gc;_=c==45;c=_?gc:c;while(c<48||c>57)c=gc;for(;c<48||c>57;c=gc);for(;c>47&&c<58;c=gc)x=(x<<3)+(x<<1)+(c&15);x=_?-x:x;}
template<typename T> void printn(T n){bool _=0;_=n<0;n=_?-n:n;char snum[65];int i=0;do{snum[i++]=n%10+48;n/= 10;}while(n);--i;if (_)pc(45);while(i>=0)pc(snum[i--]);}
template<typename First, typename ... Ints> void scan(First &arg, Ints&... rest){scan(arg);scan(rest...);}
template<typename T> void print(T n){printn(n);pc(10);}
template<typename First, typename ... Ints> void print(First arg, Ints... rest){printn(arg);pc(32);print(rest...);}

using namespace std;

mt19937 g1(time(0));
int randint(int a, int b){return uniform_int_distribution<int>(a, b)(g1);}

int n, cnt;
char str[10];
int ans[210], a[210];
vector<int> s[2], q;
string t = " RRBBRBRRBB";
int sa, rc, bc;

void gen(){
    n = 99;
    t.resize(2*n+1);
    t[0] = ' ';
    for(int i = 1; i <= 2*n; i++){
        if(rc == n)
            t[i] = 'B', bc++;
        else if(bc == n)
            t[i] = 'R', rc++;
        else{
            if(randint(0, 1))
                t[i] = 'R', rc++;
            else
                t[i] = 'B', bc++;
        }
    }
    assert(rc == bc);
    rc = bc = 0;
}

bool run(){
    sa = 0;
    assert(q.size() == n);
    printf("?");
    for(int i: q){
        assert(i > 0 && i <= 2*n);
        printf(" %d", i);
        sa += t[i] == 'R';
    }
    printf("\n"); fflush(stdout);
    q.clear();

#ifdef DEBUG
    str[0] = (sa > n/2) ? 'R' : 'B';
#else
    scanf("%s", str);
#endif
    
    assert(str[0] != '-');
    cnt++;
    return str[0] == 'R';
}

int main(){
    
    memset(a, -1, sizeof a);

#ifdef DEBUG
    gen();
#else
    scanf("%d", &n);
#endif
    
    for(int j = 1; j <= n; j++)
        q.push_back(j);
    ans[1] = run();
    
    int l = 2, m, r = n+1;
    while(l <= r){
        m = (l+r)/2;
    
        for(int j = 0; j < n; j++)
            q.push_back(m+j);
        ans[m] = run();
        
        if(ans[m] != ans[1])
            r = m-1;
        else
            l = m+1;
    }
    //l is first different
    
    int i = l;
    for(int j = 0; j < n; j++)
        q.push_back(i+j);
    ans[i] = run();
    
    if(ans[i] != ans[i-1]){
        //printf("found\n");
        a[i-1] = ans[i-1];
        a[i+n-1] = ans[i];
        s[ans[i-1]].push_back(i-1);
        s[ans[i]].push_back(i+n-1);
        rc++, bc++;
        
        //now solve the rest
        for(int j = 1; j <= 2*n; j++){
            if(j < i-1 || j > i+n-1){
                
                q.push_back(j);
                for(int k = i; k < i+n-1; k++)
                    q.push_back(k);
                
                a[j] = run();
                s[a[j]].push_back(j);
            }
        }
    }
    
    for(int i = 1; i <= 2*n; i++){
        if(a[i] == -1){
            q.push_back(i);
            for(int j = 0; j < n/2; j++)
                q.push_back(s[0][j]), q.push_back(s[1][j]);
    
            a[i] = run();
            s[a[i]].push_back(i);
        }
    }
    
    printf("! ");
    for(int i = 1; i <= 2*n; i++){
        assert(~a[i]);
        printf("%c", a[i] ? 'R' : 'B');
    }
    printf("\n"); fflush(stdout);
    
    return 0;
}


Measured memory_bytes: 724