#include <bits/stdc++.h>

using namespace std;

using ll = long long;

string judge(const vector<int>& ids, const string& ans) {
    assert(ids.size() * 2 == ans.size());
    int cnt_r = 0, cnt_b = 0;
    for (int i : ids) {
        (ans[i - 1] == 'R' ? cnt_r : cnt_b)++;
    }
    if (cnt_r > cnt_b) return "Red";
    else return "Blue";
}

string solve(int n, const string& ans) {
    vector<string> query(n + 1);
    for (int i = 0; i < n; i++) {
        vector<int> ids;
        for (int j = i; j < i + n; j++) {
            ids.push_back(j + 1);
        }
        query[i] = judge(ids, ans);
    }
    query[n] = (query[0] == "Blue" ? "Red" : "Blue");

    string res(n * 2, '#');
    if (n == 1) {
        res[0] = query[0][0];
        res[1] = query[1][0];
        return res;
    }

    int tar = -1;
    for (int i = 0; i < n; i++) {
        if (query[i] != query[i + 1]) {
            if (tar == -1) tar = i;
            res[i] = query[i][0];
            res[i + n] = query[i + 1][0];
        }
    }

    vector<int> ids;
    for (int j = tar; j < tar + n; j++) {
        ids.push_back(j + 1);
    }

    for (int i = tar + 1; i < tar + n; i++) {
        ids[i - tar] = tar + n + 1;
        res[i] = (judge(ids, ans)[0] == 'B' ? 'R' : 'B');
        ids[i - tar] = i + 1;
    }

    for (int i = 0; i < 2 * n; i++) {
        if (i >= tar && i <= tar + n) continue;
        if (res[i] != '#') continue;
        ids[0] = i + 1;
        res[i] = judge(ids, ans)[0];
    }

    return res;
}

string judge(const vector<int>& ids) {
    cout << "?";
    for (int i : ids) cout << " " << i;
    cout << endl;
    string res;
    cin >> res;
    if (res == "-1") exit(1);
    return res;
}

string solve(int n) {
    vector<string> query(n + 1);
    {
        vector<int> ids;
        for (int j = 0; j < n; j++) {
            ids.push_back(j + 1);
        }
        query[0] = judge(ids);
        query[n] = (query[0] == "Blue" ? "Red" : "Blue");
    }

    string res(n * 2, '#');
    if (n == 1) {
        res[0] = query[0][0];
        res[1] = query[1][0];
        return res;
    }

    int L = 0, R = n;
    while (R - L > 1) {
        int M = (R + L) / 2;
        vector<int> ids;
        for (int j = M; j < M + n; j++) {
            ids.push_back(j + 1);
        }
        query[M] = judge(ids);
        if (query[L] == query[M]) L = M;
        else R = M;
    }

    int tar = L;

    res[tar] = query[tar][0];
    res[tar + n] = query[tar + 1][0];

    vector<int> ids;
    for (int j = tar; j < tar + n; j++) {
        ids.push_back(j + 1);
    }

    for (int i = tar + 1; i < tar + n; i++) {
        ids[i - tar] = tar + n + 1;
        if (res[i] == '#') res[i] = (judge(ids)[0] == 'B' ? 'R' : 'B');
        ids[i - tar] = i + 1;
    }

    for (int i = 0; i < 2 * n; i++) {
        if (i >= tar && i <= tar + n) continue;
        if (res[i] != '#') continue;
        ids[0] = i + 1;
        res[i] = judge(ids)[0];
    }

    return res;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    /*
    int n = 7;

    string ans(2 * n, '#');
    for (int i = 0; i < n; i++) ans[i] = 'R';
    for (int i = n; i < 2 * n; i++) ans[i] = 'B';
    int seed;
    cin >> seed;
    mt19937 mt(seed);
    shuffle(ans.begin(), ans.end(), mt);

    for (int i = 0; i < 2 * n; i++) {
        cerr << ans[i];
    }
    cerr << endl;

    string mine = solve(n, ans);
    cout << mine << endl;
    cout << (mine == ans) << endl;*/

    int n;
    cin >> n;
    /*
    volatile unsigned long long i = 0;
    while (n > 69) {
        ++i;
    }*/
    string ans = solve(n);
    cout << "! " << ans << endl;
    return 0;
}

Measured memory_bytes: 724