//
// Created by yamunaku on 2019/11/23.
//

#include <bits/stdc++.h>

using namespace std;

#define rep(i, n) for(int i = 0; i < (n); i++)
#define repl(i, l, r) for(int i = (l); i < (r); i++)
#define per(i, n) for(int i = ((n)-1); i >= 0; i--)
#define perl(i, l, r) for(int i = ((r)-1); i >= (l); i--)
#define all(x) (x).begin(),(x).end()
#define MOD9 998244353
#define MOD1 1000000007
#define IINF 1000000000
#define LINF 1000000000000000000
#define SP <<" "<<
#define CYES cout<<"Yes"<<endl
#define CNO cout<<"No"<<endl
#define CFS cin.tie(0);ios::sync_with_stdio(false)
#define CST(x) cout<<fixed<<setprecision(x)

using ll = long long;
using ld = long double;
using vi = vector<int>;
using mti = vector<vector<int>>;
using vl = vector<ll>;
using mtl = vector<vector<ll>>;
using pi = pair<int, int>;
using pl = pair<ll, ll>;
template<typename T>
using heap = priority_queue<T, vector<T>, function<bool(const T, const T)>>;

int n;

bool query(set<int> &c){
    cout << "?";
    for(auto x:c){
        cout << " " << x + 1;
    }
    cout << endl;
    string s;
    cin >> s;
    return s == "Red";
}

int main(){
    // CFS;
    cin >> n;
    set<int> tmp;
    rep(i, n){
        tmp.insert(i);
    }
    vi ans(2 * n, -1);
    if(query(tmp)){
        int l = 0, r = n + 1;
        while(r - l > 1){
            int mid = (l + r) / 2;
            tmp.clear();
            repl(i, mid, mid + n) tmp.insert(i);
            if(query(tmp)){
                l = mid;
            }else{
                r = mid;
            }
        }
        l = r, r = l + n;
        tmp.clear();
        repl(i, l, r) tmp.insert(i);
        tmp.erase(r - 1);
        set<int> t2;
        int red = -1;
        rep(i, 2 * n){
            if(i < l || r <= i){
                tmp.insert(i);
                if(query(tmp)){
                    ans[i] = 0;
                    red = i;
                }else{
                    ans[i] = 1;
                }
                tmp.erase(i);
                t2.insert(i);
            }
        }
        t2.erase(red);
        rep(i, 2 * n){
            if(l <= i && i < r){
                t2.insert(i);
                if(query(t2)){
                    ans[i] = 0;
                }else{
                    ans[i] = 1;
                }
                t2.erase(i);
            }
        }
    }else{
        int l = 0, r = n + 1;
        while(r - l > 1){
            int mid = (l + r) / 2;
            tmp.clear();
            repl(i, mid, mid + n) tmp.insert(i);
            if(!query(tmp)){
                l = mid;
            }else{
                r = mid;
            }
        }
        l = r, r = l + n;
        tmp.clear();
        repl(i, l, r) tmp.insert(i);
        tmp.erase(r - 1);
        set<int> t2;
        int red = -1;
        rep(i, 2 * n){
            if(i < l || r <= i){
                tmp.insert(i);
                if(query(tmp)){
                    ans[i] = 0;
                }else{
                    ans[i] = 1;
                    red = i;
                }
                tmp.erase(i);
                t2.insert(i);
            }
        }
        t2.erase(red);
        rep(i, 2 * n){
            if(l <= i && i < r){
                t2.insert(i);
                if(query(t2)){
                    ans[i] = 0;
                }else{
                    ans[i] = 1;
                }
                t2.erase(i);
            }
        }
    }
    cout << "! ";
    rep(i, 2 * n) cout << (ans[i] == 0 ? 'R' : 'B');
    cout << endl;
    return 0;
}

Measured memory_bytes: 724