#include <iostream>
#include <vector>
#include <map>
using namespace std;
const int MAX = 400005;
vector<int> adj[MAX];
map<int, int> mpx, mpy;
map<pair<int, int>, int> ind;
int from[MAX], to[MAX], ptr[MAX];
bool mark[MAX], seen[MAX];
int cntx, cnty;
vector<int> ver;
char ans[MAX];
void dfs(int v)
{
seen[v] = true;
while (ptr[v] < adj[v].size())
{
int id = adj[v][ptr[v]++];
int u = from[id] + to[id] - v;
if (!mark[id])
{
mark[id] = true;
dfs(u);
}
}
ver.push_back(v);
}
int main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int x, y;
cin >> x >> y;
if (!mpx.count(x))
mpx[x] = cntx++;
if (!mpy.count(y))
mpy[y] = cnty++;
from[i] = mpx[x];
to[i] = mpy[y] + n;
ind[make_pair(from[i], to[i])] = i;
ind[make_pair(to[i], from[i])] = i;
adj[from[i]].push_back(i);
adj[to[i]].push_back(i);
}
int m = n;
for (int i = 0; i < 2 * n; i++)
if (adj[i].size() & 1)
{
from[m] = i;
to[m] = MAX - 1;
if (i >= n)
to[m]--;
adj[from[m]].push_back(m);
adj[to[m]].push_back(m);
m++;
}
if (adj[MAX - 1].size() & 1)
dfs(MAX - 1);
if ((adj[MAX - 2].size() & 1) && !mark[MAX - 2])
dfs(MAX - 2);
for (int i = 0; i < cntx; i++)
if (!seen[i] && (adj[i].size() & 1))
dfs(i);
for (int i = 0; i < cntx; i++)
if (!seen[i])
dfs(i);
for (int i = 0; i + 1 < ver.size(); i++)
if (ind.count(make_pair(ver[i], ver[i + 1])))
{
if (i & 1)
ans[ind[make_pair(ver[i], ver[i + 1])]] = 'r';
else
ans[ind[make_pair(ver[i], ver[i + 1])]] = 'b';
}
for (int i = 0; i < n; i++)
cout << ans[i];
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTUFYID0gNDAwMDA1Owp2ZWN0b3I8aW50PiBhZGpbTUFYXTsKbWFwPGludCwgaW50PiBtcHgsIG1weTsKbWFwPHBhaXI8aW50LCBpbnQ+LCBpbnQ+IGluZDsKaW50IGZyb21bTUFYXSwgdG9bTUFYXSwgcHRyW01BWF07CmJvb2wgbWFya1tNQVhdLCBzZWVuW01BWF07CmludCBjbnR4LCBjbnR5Owp2ZWN0b3I8aW50PiB2ZXI7CmNoYXIgYW5zW01BWF07CnZvaWQgZGZzKGludCB2KQp7CglzZWVuW3ZdID0gdHJ1ZTsKCXdoaWxlIChwdHJbdl0gPCBhZGpbdl0uc2l6ZSgpKQoJewoJCWludCBpZCA9IGFkalt2XVtwdHJbdl0rK107CgkJaW50IHUgPSBmcm9tW2lkXSArIHRvW2lkXSAtIHY7CgkJaWYgKCFtYXJrW2lkXSkKCQl7CgkJCW1hcmtbaWRdID0gdHJ1ZTsKCQkJZGZzKHUpOwoJCX0KCX0KCXZlci5wdXNoX2JhY2sodik7Cn0KaW50IG1haW4oKQp7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CglpbnQgbjsKCWNpbiA+PiBuOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJaW50IHgsIHk7CgkJY2luID4+IHggPj4geTsKCQlpZiAoIW1weC5jb3VudCh4KSkKCQkJbXB4W3hdID0gY250eCsrOwoJCWlmICghbXB5LmNvdW50KHkpKQoJCQltcHlbeV0gPSBjbnR5Kys7CgkJZnJvbVtpXSA9IG1weFt4XTsKCQl0b1tpXSA9IG1weVt5XSArIG47CgkJaW5kW21ha2VfcGFpcihmcm9tW2ldLCB0b1tpXSldID0gaTsKCQlpbmRbbWFrZV9wYWlyKHRvW2ldLCBmcm9tW2ldKV0gPSBpOwoJCWFkaltmcm9tW2ldXS5wdXNoX2JhY2soaSk7CgkJYWRqW3RvW2ldXS5wdXNoX2JhY2soaSk7Cgl9CglpbnQgbSA9IG47Cglmb3IgKGludCBpID0gMDsgaSA8IDIgKiBuOyBpKyspCgkJaWYgKGFkaltpXS5zaXplKCkgJiAxKQoJCXsKCQkJZnJvbVttXSA9IGk7CgkJCXRvW21dID0gTUFYIC0gMTsKCQkJaWYgKGkgPj0gbikKCQkJCXRvW21dLS07CgkJCWFkaltmcm9tW21dXS5wdXNoX2JhY2sobSk7CgkJCWFkalt0b1ttXV0ucHVzaF9iYWNrKG0pOwoJCQltKys7CgkJfQoJaWYgKGFkaltNQVggLSAxXS5zaXplKCkgJiAxKQoJCWRmcyhNQVggLSAxKTsKCWlmICgoYWRqW01BWCAtIDJdLnNpemUoKSAmIDEpICYmICFtYXJrW01BWCAtIDJdKQoJCWRmcyhNQVggLSAyKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgY250eDsgaSsrKQoJCWlmICghc2VlbltpXSAmJiAoYWRqW2ldLnNpemUoKSAmIDEpKQoJCQlkZnMoaSk7Cglmb3IgKGludCBpID0gMDsgaSA8IGNudHg7IGkrKykKCQlpZiAoIXNlZW5baV0pCgkJCWRmcyhpKTsKCWZvciAoaW50IGkgPSAwOyBpICsgMSA8IHZlci5zaXplKCk7IGkrKykKCQlpZiAoaW5kLmNvdW50KG1ha2VfcGFpcih2ZXJbaV0sIHZlcltpICsgMV0pKSkKCQl7CgkJCWlmIChpICYgMSkKCQkJCWFuc1tpbmRbbWFrZV9wYWlyKHZlcltpXSwgdmVyW2kgKyAxXSldXSA9ICdyJzsKCQkJZWxzZQoJCQkJYW5zW2luZFttYWtlX3BhaXIodmVyW2ldLCB2ZXJbaSArIDFdKV1dID0gJ2InOwoJCX0KCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJCWNvdXQgPDwgYW5zW2ldOwoJY291dCA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0K