#include "toxic.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
struct Block {
int l, len;
};
void determine_type(int n) {
vector<char> ans(n, 'R');
vector<Block> uni;
int anchorT = -1;
auto make_query = [&](int l, int len) {
vector<int> vc;
for (int j = 0; j < len; j++) {
for (int k = 0; k < (1 << j); k++) vc.pb(l + j);
}
return query_machine(vc);
};
int B = (n + 7) / 8;
for (int b = 0; b < B; b++) {
int l = b * 8;
int len = min(8, n - l);
vector<int> p = make_query(l, len);
int full = (1 << len) - 1;
int got = p.back();
if (got == full) {
uni.pb({l, len});
} else {
for (int j = 0; j < len; j++) {
if (got & (1 << j)) ans[l + j] = 'T';
else ans[l + j] = 'R';
}
if (anchorT == -1) {
for (int j = 0; j < len; j++) {
if (got & (1 << j)) {
anchorT = l + j;
break;
}
}
}
}
}
if (anchorT != -1) {
for (auto bl : uni) {
vector<int> vc;
vc.pb(anchorT);
for (int j = 0; j < bl.len; j++) vc.pb(bl.l + j);
vector<int> p = query_machine(vc);
if (p.back() == 1) {
for (int j = 0; j < bl.len; j++) ans[bl.l + j] = 'R';
} else {
for (int j = 0; j < bl.len; j++) ans[bl.l + j] = 'T';
}
}
answer_type(ans);
return;
}
vector<int> all;
for (int i = 0; i < n; i++) all.pb(i);
int totalT = query_machine(all).back();
int m = (int)uni.size();
vector<int> col(m, -1);
col[0] = 0;
for (int i = 0; i + 1 < m; i++) {
vector<int> vc;
for (int j = 0; j < uni[i].len; j++) vc.pb(uni[i].l + j);
for (int j = 0; j < uni[i + 1].len; j++) vc.pb(uni[i + 1].l + j);
vector<int> p = query_machine(vc);
if (p.back() == uni[i].len + uni[i + 1].len) col[i + 1] = col[i];
else col[i + 1] = col[i] ^ 1;
}
long long s0 = 0, s1 = 0;
for (int i = 0; i < m; i++) {
if (col[i] == 0) s0 += uni[i].len;
else s1 += uni[i].len;
}
int toxicColor = (s0 == totalT ? 0 : 1);
for (int i = 0; i < m; i++) {
for (int j = 0; j < uni[i].len; j++) {
ans[uni[i].l + j] = (col[i] == toxicColor ? 'T' : 'R');
}
}
answer_type(ans);
}