//https://atcoder.jp/contests/ddcc2020-qual/tasks/ddcc2020_qual_e
#include<bits/stdc++.h>
using namespace std;

int n, n2, cnt;
string res;
string test;

bool ok(string &s) {
	int r = 0, b = 0;
	for (char ch : test) {
		ch == 'R' ? r++ : b++;
	}
	return r == b and r == n;
}

void init() {
	cin >> n;
	//n = 99;
	n2 = n * 2;
	cnt = 0;
	res = string(n2, '.');
	/*
	//test = string(n2, 'R');
	//srand(time(NULL));
	//int idx;
	//for (int i = 1; i < n2; i += 2) {
	//for (int i = n; i < n2; i++) {
	//	do {
	//		idx = abs((int)rand()) % n2;
	//	} while (test[idx] == 'B');
		//test[i] = 'B';
	//	test[idx] = 'B';
	//}
	//test = "BBRBRBBBRBBRBBBBRBRRBRRRRRBRBBBBRBRRBBRBRBRBBRRRRBBBBBRRRRBBRBRRRRRBBRRRRBRRBRBRBRRRBRRRBRRBRBRRBRBBBRBRBRBBRBRRBBBBRRBRBRBBBRBRRBRBBRBRBRBRRRBRBRRBBBBBRRRBBRBBBRRBRRRBRBBRBBBBBBBRBRBRRRBBRRRRRRBBRB";
	//test = "RRBBRRBRBRBRRBBRRBBBBRBBRRRBRBBRBBRBRRRBRRRBBBBBRRBBRBRBRRBBRBRBBRRRBBBRRBRRBBBRBBBRRBBBRRRBRRRRRBBRBRBRRBBBRRRRRBRBRBRBRRBRRBRBBBRBBBRRRBBBRBRRRRBBRBBRBRBBRBBBRBRBBRBBRRRBRBBRRRBBBBBBRRRRBBRRBRRRRB";
	//test = "BBBBRBBBBBBBBBBRBRBRRBBBRRBBBBBRRBRBBBRRRRRRBRBRRBRRRRRBRRRRBRRRBBRRRRRBRRBRRRBBRBBRRBBBBBRRBBRBBBBBRBRBBRRRRBRRBRRRBBBRBRBRRBRBRRBBBBRRRRRBBRBBRBRRBRRRRRRBBBRRBRRRBRBBRRRRRBBBBBRBBBBBBBBBRRBRBRRRRB";
	//cerr << test << "\n";
	//assert(ok(test));
	*/
}

string rep;

char query(set<int> q) {
	int x;
	cout << "?";
	//int r = 0, b = 0;
	while (q.size()) {
		x = *q.begin();
		cout << " " << x + 1;
		//test[x] == 'R' ? r++ : b++;
		q.erase(x);
	}
	cnt++;
	if (cnt > 210) {
		cerr << res << "\n";	
	}
	assert(cnt <= 210);
	cout << endl;
	cin >> rep;
	return rep[0];
	//return r > b ? 'R' : 'B';
}

int L, R;

void step1_binarySearch() {
	set<int> qL, qR, qM;
	for (int i = 0; i < n; i++) {
		qL.insert(i);
		qR.insert(i + n);
	}
	char colorL = query(qL);
	char colorR = (colorL == 'R' ? 'B' : 'R');
	char colorM;
	//assert(colorL != colorR);
	L = 0, R = n;
	int M;
	while (L + 1 < R) {
		M = (L + R) / 2;
		//cerr << L << " " << M << " " << R << "\n";
		for (int i = 0; i < n; i++) {
			qM.insert(i + M);
		}
		colorM = query(qM);
		if (colorL == colorM) {
			L = M;
			qL = qM;
			colorL = colorM;
		} else {
			R = M;
			qR = qM;
			colorR = colorM;
		}
		qM.clear();
	}
	R = L + n;
	res[L] = colorL;
	res[R] = colorR;
}

int red, blue;

void step2() {
	red = blue = (n - 1) / 2;
	set<int> q;
	for (int i = L + 1; i < R; i++) {
		q.insert(i);
	}
	for (int i = 0; i < n2; i++) {
		if (i < L or i > R) {
			if (red == 0) {
				res[i] = 'B';
				continue;
			}
			if (blue == 0) {
				res[i] = 'R';
				continue;
			}
			q.insert(i);
			(res[i] = query(q)) == 'R' ? red-- : blue--;
			q.erase(i);
		}
	}
}

void step3() {
	red = blue = (n - 1) / 2;
	set<int> q;
	for (int i = 0; i < n2; i++) {
		if (i < L or i > R) {
			q.insert(i);
		}
	}
	for (int i = L + 1; i < R; i++) {
		if (red == 0) {
			res[i] = 'B';
			continue;
		}
		if (blue == 0) {
			res[i] = 'R';
			continue;
		}
		q.insert(i);
		(res[i] = query(q)) == 'R' ? red-- : blue--;
		q.erase(i);
	}
}

int main() {
	//ios_base::sync_with_stdio(false); cin.tie();
	init();
	step1_binarySearch();
	if (n == 1) {
		cout << "! " << res << endl;
		return 0;
	}
	step2();
	step3();
	cout << "! " << res << endl;	
	//cerr << cnt << "\n";
	//assert(ok(res));
	//assert(res == test);
	return 0;
}

Measured memory_bytes: 724