#include <cstring>
#include <map>
#include <unordered_map>
#include <string>
#include <list>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <set>
#include <unordered_set>
using namespace std;

#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
typedef pair<int, int> pii;

int gi() {
    int a;
    scanf("%d", &a);
    return a;
}

ll gli() {
    ll a;
    scanf("%lld", &a);
    return a;
}

char a[200];
int n;
int v[100];

char q() {
    printf("?");
    for (int i = 0; i < n; i++)
        printf(" %d", v[i]+1);
    printf("\n");
    fflush(stdout);
    char res[10];
    scanf("%s", res);
    if (res[0] == '-')
        exit(0);
    return res[0];
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    n = gi();
    for (int i = 0; i < n; i++)
        v[i] = i;
    char la = q();
    int w = 0, y = n;
    while (w+1 < y) {
        int m = (w+y)/2;
        for (int i = 0; i < n; i++)
            v[i] = m+i;
        if (q() == la)
            w = m;
        else
            y = m;
    }

    a[w] = la;
    a[w+n] = (la == 'R' ? 'B' : 'R');

    for (int i = 1; i < n; i++)
        v[i] = w+i;

    for (int i = 0; i < w; i++) {
        v[0] = i;
        a[i] = q();
    }
    for (int i = w+n+1; i < 2*n; i++) {
        v[0] = i;
        a[i] = q();
    }

    for (int i = 0; i < w; i++)
        v[i+1] = i;
    for (int i = w+n+1; i < 2*n; i++)
        v[i-n] = i;

    for (int i = w+1; i < w+n; i++) {
        v[0] = i;
        a[i] = q();
    }

    a[2*n] = 0;
    printf("! %s\n", a);

    return 0;
}
