#include <bits/stdc++.h>
const int maxn = 2E5 + 31;
const int maxm = maxn * 12;
const int TT = maxn - 1;
struct EDGE {
  int to, idx, next;
} edges[maxm];
int cEdge = 1, head[2][maxn];
void addEdge(int a, int b, int x) {
  edges[cEdge] = (EDGE){b, x, head[0][a]};
  head[0][a] = cEdge++;
  edges[cEdge] = (EDGE){a, x, head[1][b]};
  head[1][b] = cEdge++;
}
int N, X[maxn], Y[maxn], C[2][maxn], D[maxm];
bool vis[maxm];
int cdfs = 0;
void dfs(int d, int x) {
  for (int k = head[d][x]; k; k = edges[k].next) {
    int v = edges[k].to, idx = edges[k].idx;
    if (vis[idx]) continue;
    vis[idx] = true;
    head[d][x] = edges[k].next;
    D[idx] = d;
    dfs(d ^ 1, v);
    return;
  }
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N; ++i) {
    scanf("%d%d", X + i, Y + i);
    ++C[0][X[i]];
    ++C[1][Y[i]];
    addEdge(X[i], Y[i], i);
  }
  int x = N;
  for (int d = 0; d < 2; ++d)
    for (int i = 1; i < TT; ++i)
      if (C[d][i] & 1) {
        if (d)
          addEdge(TT, i, ++x);
        else
          addEdge(i, TT, ++x);
      }
  dfs(0, TT);
  cdfs = 0;
  dfs(1, TT);
  for (int d = 0; d < 2; ++d)
    for (int i = 1; i < TT; ++i) dfs(d, i);
  for (int i = 1; i <= N; ++i) {
    printf("%c", D[i] ? 'r' : 'b');
  }
  printf("\n");
}
