#include using namespace std; #define rep(i, l, r) for (int i = (int)(l); i<(int)(r); i++) #define ll long long int main() { int N, M; cin >> N >> M; if (M%2) { cout << -1 << endl; return 0; } vector>> G(N); vector unuse; rep(i, 0, M) { int u, v; cin >> u >> v; u--; v--; if (u == 0 and v == N-1) { cout << -1 << endl; return 0; } if (u != 0 and u != N-1 and v != 0 and v != N-1) { unuse.push_back(i); } G[u].push_back({v, i}); G[v].push_back({u, i}); } // cout << "ok1" << endl; auto reachable = [&](int v) -> vector { int x = N - 1 - v; vector ret(N, false); queue Q; ret[v] = true; Q.push(v); while(!Q.empty()) { int u = Q.front(); Q.pop(); // cout << u << " "; for (auto[to, id] : G[u]) { if (to == x) continue; if (!ret[to]) { ret[to] = true; Q.push(to); } } } // cout << endl; assert(ret[x] == false); return ret; }; vector R1 = reachable(0), RN = reachable(N-1); // for (auto v : R1) cout << v << " "; // cout << endl; // for (auto v : RN) cout << v << " "; // cout << endl; string ans(M, '.'); int R = 0, B = 0; for (auto[to, id] : G[0]) { if (!R1[to] or !RN[to]) { //いらない unuse.push_back(id); } else { ans[id] = 'R'; R++; } } // cout << "ok" << endl; for (auto[to, id] : G[N-1]) { if (!R1[to] or !RN[to]) { //いらない unuse.push_back(id); } else { ans[id] = 'B'; B++; } } // cout << "ok3" << endl; // cout << ans << endl; assert(R <= M/2); assert(B <= M/2); while(R < M/2) { int t = unuse.back(); unuse.pop_back(); ans[t] = 'R'; R++; } for (auto t : unuse) ans[t] = 'B'; cout << ans << endl; }