#include <stdio.h>
#include <stdlib.h>

#include <iostream>
#include <iomanip>
#include <sstream>
#include <stdint.h>
#include <string.h>

#define _USE_MATH_DEFINES
#include <math.h>

#include <vector>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <stack>
#include <deque>
#include <string>

#include <algorithm>
#include <functional>
#include <bitset>
#include <functional>
#include <chrono>
#include <random>

#define sqr(x) (x) * (x)

typedef unsigned int u32;
typedef int long long i32;
typedef unsigned long long int u64;
typedef long long int i64;
typedef uint16_t u16;
typedef int16_t i16;
typedef uint8_t u8;
typedef int8_t i8;

using namespace std;
using namespace std::chrono;

const i64 mod = 1000000007ll;
const i64 smod = 998244353ll;
const i64 inf = 10000000000000007ll;

const double eps = 1e-10;

const i64 MAXN = 209;

i64 T;

i64 n;
i64 a[MAXN];
i64 b[MAXN];
i64 z[MAXN];
i64 c[MAXN];

char query() {
    stringstream ss;
    ss << "? ";
    for (i64 i = 1; i <= n; i++) {
        ss << z[i] << " ";
    }
    cout << ss.str() << endl;
    cout.flush();

    string R;
    cin >> R;
    return R[0];
}

char queryz(i64 j) {
    for (i64 i = 1; i < j; i++) {
        z[i] = b[i];
    }
    for (i64 i = j; i <= n; i++) {
        z[i] = a[i];
    }
    return query();
}

i64 bin(i64 l, i64 r) {
    if (l == r) {
        return l;
    }
    if (l + 1 == r) {
        char c = queryz(l);
        if (c == 'B') {
            return l;
        }
        else {
            return r;
        }
    }

    i64 t = (l + r) / 2;
    char c = queryz(t);
    if (c == 'R') {
        return bin(t, r);
    }
    else {
        return bin(l, t);
    }
}


int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cout.precision(15); cout.setf(ios::fixed);

    cin >> n;
    for (i64 i = 1; i <= n; i++) {
        z[i] = i;
    }

    char tr = query();
    if (tr == 'R') {
        for (i64 i = 1; i <= n; i++) {
            a[i] = i;
        }
        for (i64 i = 1; i <= n; i++) {
            b[i] = n + i;
        }
    }
    else {
        for (i64 i = 1; i <= n; i++) {
            a[i] = n + i;
        }
        for (i64 i = 1; i <= n; i++) {
            b[i] = i;
        }
    }

    i64 j = bin(1, n + 1) - 1;
    c[a[j]] = 'R';
    c[b[j]] = 'B';

    set<i64> q;
    for (i64 i = 1; i <= 2 * n; i++) {
        q.insert(i);
    }
    for (i64 i = 1; i < j; i++) {
        q.erase(b[i]);
        z[i] = b[i];
    }
    for (i64 i = j + 1; i <= n; i++) {
        q.erase(a[i]);
        z[i] = a[i];
    }
    q.erase(a[j]);
    q.erase(b[j]);

    for (auto t : q) {
        z[j] = t;
        char tc = query();
        c[t] = tc;
    }

    i64 cr = 0;
    i64 cb = 0;

    i64 k = 1;
    for (i64 i = 1; i <= 2 * n; i++) {
        if (!c[i]) {
            continue;
        }
        if (c[i] == 'R' && cr < n / 2) {
            z[k++] = i;
            cr++;
        }
        if (c[i] == 'B' && cb < n / 2) {
            z[k++] = i;
            cb++;
        }
    }

    for (i64 i = 1; i <= 2 * n; i++) {
        if (c[i]) {
            continue;
        }
        z[n] = i;
        char tc = query();
        c[i] = tc;
    }

    stringstream ss;
    ss << "! ";
    for (i64 i = 1; i <= 2 * n; i++) {
        ss << (char)c[i];
    }
    cout << ss.str() << endl;
    cout.flush();

    return 0;
}

Measured memory_bytes: 724