### BUGGY CODE ###

import sys
read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines

import itertools

# DEBUG = True
DEBUG = False

N = int(read())

class Interactive:
    def __init__(self):
        self.ques_cnt = 0
        self.create_data()
        
    def create_data(self):
        import random
        A = ['B']*N + ['R']*N
        random.shuffle(A)
        self.A = [None] + A
        
    def resp_ques(self, *args):
        self.ques_cnt += 1
        assert len(args) == N
        from collections import Counter
        A = self.A
        selected = [A[i] for i in args]
        counter = Counter(selected)
        resp = 'Red' if counter['R'] > counter['B'] else 'Blue'
        return resp
    
    def resp_ans(self, *args):
        if len(args) != 1 or not isinstance(args[0], str):
            raise ValueError('Answer must be a string')
        if list(args[0]) == self.A[1:]:
            print('AC!')
            print('num of questions:', self.ques_cnt)
        else:
            print('WA!')
            
if DEBUG:
    interactive = Interactive()
    
def question(*args):
    print('?', *args, flush=True)
    if DEBUG:
        resp = interactive.resp_ques(*args)
        print(resp)
        return resp
    else:
        return read()
    
def answer(*args):
    print('!', *args, flush=True)
    if DEBUG:
        interactive.resp_ans(*args)
    else:
        exit()

answer('RRBBRB')

### FIXED CODE ###

import sys
readline = sys.stdin.readline

import itertools

#DEBUG = True
DEBUG = False

N = int(readline())

class Interactive:
    def __init__(self):
        self.ques_cnt = 0
        self.create_data()
        
    def create_data(self):
        import random
        A = ['B']*N + ['R']*N
        random.shuffle(A)
        self.A = [None] + A
        
    def resp_ques(self, *args):
        self.ques_cnt += 1
        assert len(args) == N
        from collections import Counter
        A = self.A
        selected = [A[i] for i in args]
        counter = Counter(selected)
        resp = 'Red' if counter['R'] > counter['B'] else 'Blue'
        return resp
    
    def resp_ans(self, *args):
        if len(args) != 1 or not isinstance(args[0], str):
            raise ValueError('Answer must be a string')
        if list(args[0]) == self.A[1:]:
            print('AC!')
            print('num of questions:', self.ques_cnt)
        else:
            print('WA!')
            
if DEBUG:
    interactive = Interactive()
    
def question(*args):
    print('?', *args, flush=True)
    if DEBUG:
        resp = interactive.resp_ques(*args)
        print(resp)
        return resp
    else:
        return readline()
    
def answer(*args):
    print('!', *args, flush=True)
    if DEBUG:
        interactive.resp_ans(*args)
    else:
        exit()

def make_LR_range(L,R):
    return itertools.chain(range(1,L+1), range(N+N-R+1, N+N+1))

def f(L):
    return question(*make_LR_range(L, N-L)).rstrip()

# f(L) != f(R)
L = 0
R = N
cL = f(L)
while L + 1 < R:
    x = (L + R) // 2
    if cL == f(x):
        L = x
    else:
        R = x

inv = {'B':'R', 'R':'B'}

C = [None] * (N+N+1)
C[L+1] = inv[cL[0]]
C[L+N+1] = cL[0]

A = list(range(1,L+1)) + list(range(L+N+2,N+N+1))
B = list(range(L+2,L+N+1))
for b in B:
    resp = question(b, *A)
    C[b] = resp[0]
for a in A:
    resp = question(a, *B)
    C[a] = resp[0]

answer(''.join(C[1:]))