#include <bits/stdc++.h>
using namespace std;
using Int = long long;
#define REP(i, n) for (Int i = 0, max_i = (n); i < max_i; i++)
#define REPI(i, a, b) for (Int i = (a), max_i = (b); i < max_i; i++)
#define ALL(obj) begin(obj), end(obj)
#define RALL(obj) rbegin(obj), rend(obj)
#define fi first
#define se second
using ii = pair<Int, Int>;
template <class T> inline bool chmax(T& a, const T& b) {
    if (a >= b) return false;
    a = b;
    return true;
}
template <class T> inline bool chmin(T& a, const T& b) {
    if (a <= b) return false;
    a = b;
    return true;
}
struct SetupIO {
    SetupIO() { cin.tie(nullptr), ios::sync_with_stdio(false), cout << fixed << setprecision(20); }
} setup_io;

template <class T> std::ostream& print(std::ostream& out, T const& val) { return (out << val << " "); }
template <class T1, class T2> std::ostream& print(std::ostream& out, std::pair<T1, T2> const& val) {
    return (out << "{" << val.first << " " << val.second << "} ");
}
template <template <class, class...> class TT, class... Args>
std::ostream& operator<<(std::ostream& out, TT<Args...> const& cont) {
    for (auto&& elem : cont) print(out, elem);
    return out;
}

void dump_func() { cerr << endl; }
template <class Head, class... Tail> void dump_func(Head&& h, Tail&&... t) {
    cerr << h << (sizeof...(Tail) == 0 ? "" : ", "), dump_func(forward<Tail>(t)...);
}
#ifdef _MY_DEBUG
#define dump(...)                                                                                                    \
    cerr << "/* " << #__VA_ARGS__ << " [" << __LINE__ << ":" << __FUNCTION__ << "]" << endl, dump_func(__VA_ARGS__), \
        cerr << "*/\n\n";
#else
#define dump(...)
#endif

/**
 *    author:  knshnb
 *    created: Sun Nov 24 12:05:10 JST 2019
 **/

Int n;
bool query(const vector<Int>& a) {
    assert(a.size() == n);
    cout << "? ";
    for (Int x : a) cout << x + 1 << " ";
    cout << endl;
    string s;
    cin >> s;
    return s == "Red";
}
signed main() {
    cin >> n;
    Int red = n, blue = 0;
    bool rev = false;
    {
        vector<Int> a(n);
        REP(i, n) a[i] = i;
        rev = !query(a);
    }
    if (rev) swap(red, blue);

    auto check = [&](int mid) -> bool {
        vector<Int> a;
        REP(i, mid) a.push_back(i);
        REPI(i, n + mid, 2 * n) a.push_back(i);
        return query(a);
    };
    Int prv = -1;
    while (abs(red - blue) > 1) {
        Int mid = (red + blue) / 2;
        (check(mid) ? red : blue) = mid;
    }

    vector<Int> a;
    Int x = red - !rev;
    REP(i, x) a.push_back(i);
    REPI(i, n + x + 1, 2 * n) a.push_back(i);
    vector<Int> ans(2 * n, -1);
    vector<Int> b;
    Int r_num = 0, b_num = 0;
    dump(a);
    assert(a.size() == n - 1);
    REP(i, 2 * n) {
        if (count(ALL(a), i)) continue;
        a.push_back(i);
        ans[i] = query(a);
        if (ans[i] && r_num < (n - 1) / 2) b.push_back(i), r_num++;
        if (!ans[i] && b_num < (n - 1) / 2) b.push_back(i), b_num++;
        a.pop_back();
    }
    dump(b);
    assert(b.size() == n - 1);
    REP(i, 2 * n) {
        if (ans[i] != -1) continue;
        assert(!count(ALL(b), i));
        b.push_back(i);
        ans[i] = query(b);
        b.pop_back();
    }

    cout << "! ";
    for (Int x : ans) cout << (x ? "R" : "B");
    cout << endl;
}


Measured memory_bytes: 724