#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;
}
