#include <bits/stdc++.h>
using namespace std;
const int MAXN = 400005;
const int MAXM = 4 * MAXN;
const int N = 200000;
int n, m;
int to[MAXM], val[MAXM], deg[MAXN];
int head[MAXN], nxt[MAXM];
bool bw[MAXN], vis[MAXM], tag;
char ans[MAXN];
vector<int> odd;
void addEdge(int u, int v, int w) {
  to[m] = v, val[m] = w, nxt[m] = head[u], head[u] = m++;
  to[m] = u, val[m] = w, nxt[m] = head[v], head[v] = m++;
  deg[u]++, deg[v]++;
}
void DFS1(int u) {
  bw[u] = 1;
  if (deg[u] & 1) odd.push_back(u);
  for (int i = head[u]; i; i = nxt[i])
    if (!bw[to[i]]) DFS1(to[i]);
}
void DFS2(int u) {
  for (int &i = head[u]; i; i = nxt[i])
    if (!vis[i]) {
      vis[i] = vis[i ^ 1] = 1;
      int t = i;
      DFS2(to[i]);
      tag ^= val[t];
      if (t >> 1 <= n) ans[t >> 1] = tag ? 'r' : 'b';
    }
}
int main() {
  scanf("%d", &n);
  m = 2;
  for (int i = 1, x, y; i <= n; i++) {
    scanf("%d%d", &x, &y);
    addEdge(x, y + N, 1);
  }
  for (int i = 1; i <= 2 * N; i++)
    if (!bw[i]) {
      odd.clear();
      DFS1(i);
      for (int j = 0; j < (int)odd.size(); j += 2) {
        int u = odd[j], v = odd[j + 1];
        addEdge(u, v, (u <= N) ^ (v <= N));
      }
      DFS2(i);
    }
  for (int i = 1; i <= n; i++) assert(ans[i]);
  puts(ans + 1);
  return 0;
}
