#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(x) (x).begin(),(x).end()
//#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
typedef long long ll; const int inf = INT_MAX / 2; const ll infl = 1LL << 60;
template<class T>bool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }
//---------------------------------------------------------------------------------------------------
int getrandmax() {
	static uint32_t y = time(NULL);
	y ^= (y << 13); y ^= (y >> 17);
	y ^= (y << 5);
	return abs((int)y);
}
int getrand(int l, int r) { // [l, r]
	return getrandmax() % (r - l + 1) + l;
}
vector<int> makePermutation(int n) {
	vector<int> v(n);
	rep(i, 0, n) v[i] = i + 1;
	rep(i, 0, n) {
		int j = getrand(0, n - 1);
		swap(v[i], v[j]);
	}
	return v;
}
/*---------------------------------------------------------------------------------------------------
　　　　　　　　　　　 ∧＿∧
　　　　　 ∧＿∧ 　（´<_｀ ）　 Welcome to My Coding Space!
　　　　 （ ´_ゝ`）　/　 ⌒i     @hamayanhamayan
　　　　／　　　＼　 　  |　|
　　　 /　　 /￣￣￣￣/　　|
　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿
　 　　　＼/＿＿＿＿/　（u　⊃
---------------------------------------------------------------------------------------------------*/














int N;
vector<int> dic;
char ans[201];
//---------------------------------------------------------------------------------------------------
bool debug = false;
vector<int> background;
int askcnt = 0;
string ask(vector<int> d) {
	printf("?");
	fore(i, d) printf(" %d", dic[i]);
	printf("\n");
	fflush(stdout);

	if (debug) {
		int r = 0, b = 0;
		fore(i, d) {
			if (background[dic[i]] == 1) r++;
			else b++;
		}

		askcnt++;
		if (210 < askcnt) return "-1";

		string re;
		if (r < b) re = "Blue";
		else re = "Red";
		printf("%s\n", re.c_str());
		fflush(stdout);
		return re;
	}

	string res; cin >> res;
	return res;
}
string ask2(int st) {
	vector<int> v;
	rep(i, 0, N) v.push_back((st + i) % (2 * N));
	return ask(v);
}
char ans2[201];
void answer() {
	rep(i, 0, N * 2) ans2[dic[i]] = ans[i];
	printf("! ");
	rep(i, 0, N * 2) printf("%c", ans2[i + 1]);
	printf("\n");
}
//---------------------------------------------------------------------------------------------------
#define blue 'B'
#define red 'R'
void _main() {
	cin >> N;

	if (debug) {
		background.push_back(0);
		rep(i, 0, N) background.push_back(1);
		rep(i, 0, N) background.push_back(2);
	}

	dic = makePermutation(2 * N);
	rep(i, 0, 2 * N) ans[i] = '#';

	int a = 0, b = N;
	string as = ask2(a), bs = ask2(b);
	while (a + 1 != b) {
		int md = (a + b) / 2;
		if (ask2(md) == as) a = md;
		else b = md;
	}

	if (as == "Red") {
		ans[a] = 'R';
		ans[(a + N) % (2 * N)] = 'B';
	}
	else {
		ans[a] = 'B';
		ans[(a + N) % (2 * N)] = 'R';
	}

	rep(st, 0, N - 1) {
		vector<int> v;
		rep(i, 0, N - 1) v.push_back((a + 1 + i) % (2 * N));
		v.push_back((a + N + 1 + st) % (2 * N));
		auto res = ask(v);
		if (res == "Red") ans[(a + N + 1 + st) % (2 * N)] = 'R';
		else ans[(a + N + 1 + st) % (2 * N)] = 'B';
	}

	rep(st, 0, N - 1) {
		vector<int> v;
		rep(i, 0, N - 1) v.push_back((a + 1 + N + i) % (2 * N));
		v.push_back((a + 1 + st) % (2 * N));
		auto res = ask(v);
		if (res == "Red") ans[(a + 1 + st) % (2 * N)] = 'R';
		else ans[(a + 1 + st) % (2 * N)] = 'B';
	}

	answer();
}







Measured memory_bytes: 724