#include <bits/stdc++.h>
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
}
using namespace std;
int n;
int X[801000], Y[801000];
int blong[801000], d[801000];
struct edge {
  int nxt, to;
} e[801000 << 1];
int head[801000], ecnt = 1;
inline void addedge(int from, int to) {
  e[++ecnt] = (edge){head[from], to};
  head[from] = ecnt;
}
bool vis[801000], evis[801000 << 1], type[801000 << 1];
void dfs(int cur) {
  vis[cur] = true;
  for (int &i = head[cur]; i; i = e[i].nxt) {
    int to = e[i].to;
    if (evis[i]) continue;
    evis[i] = evis[i ^ 1] = true;
    type[i] = true;
    dfs(to);
  }
}
inline void work() {
  int lst = 0;
  for (int i = 1; i <= 400000; ++i) {
    if (d[i] & 1) {
      if (!lst)
        lst = i;
      else
        addedge(i, lst), addedge(lst, i), lst = 0;
    }
  }
  for (int i = 1; i <= 400000; ++i) {
    if (!vis[i]) dfs(i);
  }
  for (int i = 1; i <= n; ++i) putchar(type[blong[i]] ? 'r' : 'b');
}
int main() {
  read(n);
  for (int i = 1; i <= n; ++i) {
    read(X[i]), read(Y[i]);
    Y[i] += 200000;
    addedge(X[i], Y[i]), addedge(Y[i], X[i]), blong[i] = ecnt;
    ++d[X[i]];
    ++d[Y[i]];
  }
  work();
  return 0;
}
