#include <bits/stdc++.h>
using namespace std;
const int inft = 1000000009;
const int MAXN = 400005, MAXM = MAXN;
int n;
vector<int> adj[MAXN];
int edgx[MAXM];
int cc;
int cycle[MAXM];
char used[MAXM];
int ep, sp, cur[MAXN], stackedge[MAXM];
void search(int v) {
  sp = 0;
  while (1) {
    while (cur[v] != adj[v].size()) {
      int e = adj[v][cur[v]++];
      if (used[e]) continue;
      used[e] = 1;
      stackedge[sp++] = e;
      v ^= edgx[e];
    }
    sp--;
    if (sp < 0) break;
    cycle[cc++] = stackedge[sp];
    v ^= edgx[stackedge[sp]];
  }
}
void search_all() {
  for (int v = 0; v < (n); ++v) search(v);
}
void addedge(int a, int b) {
  edgx[ep] = a ^ b;
  adj[a].push_back(ep);
  adj[b].push_back(ep);
  ep++;
}
void clear() {
  for (int i = 0; i < (n); ++i) adj[i].clear();
  cc = 0;
  ep = 0;
  sp = 0;
  for (int i = 0; i < (n); ++i) cur[i] = 0;
}
int X[MAXN], Y[MAXN];
char ANS[MAXN];
int main() {
  int nn;
  scanf("%d", &nn);
  n = MAXN;
  for (int i = 0; i < (nn); ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    ++X[a];
    ++Y[b];
    addedge(a, b + MAXN / 2);
  }
  for (int i = 0; i < (MAXN / 2); ++i)
    if (X[i] % 2) addedge(0, i);
  for (int i = 0; i < (MAXN / 2); ++i)
    if (Y[i] % 2) addedge(0, MAXN / 2 + i);
  search_all();
  for (int i = 0; i < (ep); ++i)
    if (cycle[i] < nn) ANS[cycle[i]] = i % 2 ? 'r' : 'b';
  printf("%s\n", ANS);
  return 0;
}
