#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast,no-stack-protector")
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << "\n";
  err(++it, args...);
}
function<void(void)> ____ = []() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
};
template <typename T>
vector<T> &operator<<(vector<T> &__container, T x) {
  __container.push_back(x);
  return __container;
}
template <typename T>
ostream &operator<<(ostream &out, vector<T> &__container) {
  for (T _ : __container) out << _ << ' ';
  return out;
}
void sci() {}
template <typename... Args>
void sci(int &x, Args &...args) {
  scanf("%d", &x);
  sci(args...);
}
void scl() {}
template <typename... Args>
void scl(long long int &x, Args &...args) {
  scanf("%lld", &x);
  scl(args...);
}
const int MAXN = 4e5 + 7;
const int D = 2e5 + 1;
struct Graph {
  int head[MAXN], to[MAXN << 2], next[MAXN << 2], ID[MAXN << 2], tot;
  Graph() {
    memset(head, 255, sizeof(head));
    tot = 0;
  }
  void addEdge(int u, int v, int id) {
    to[tot] = v;
    ID[tot] = id;
    next[tot] = head[u];
    head[u] = tot++;
  }
} G;
int n, deg[MAXN], tag[MAXN], vis[MAXN << 2];
vector<int> edgeid;
char col[MAXN];
void euler(int u) {
  int curtime = ++tag[u];
  for (int i = G.head[u]; ~i; i = G.next[i]) {
    if (vis[i]) continue;
    vis[i] = vis[i ^ 1] = true;
    G.head[u] = G.next[i];
    euler(G.to[i]);
    edgeid.push_back(G.ID[i]);
    if (curtime != tag[u]) break;
  }
}
void solve() {
  sci(n);
  for (int i = 1; i <= n; i++) {
    int u, v;
    sci(u, v);
    G.addEdge(u, v + D, i);
    G.addEdge(v + D, u, i);
    deg[u]++;
    deg[v + D]++;
  }
  vector<int> va, vb;
  for (int i = 1; i <= D; i++)
    if (deg[i] & 1) va << i;
  for (int i = D + 1; i <= D * 2; i++)
    if (deg[i] & 1) vb << i;
  for (int i = 0; i < (int)max(va.size(), vb.size()); i++) {
    if (i >= va.size()) {
      G.addEdge(vb[i], D, 0);
      G.addEdge(D, vb[i], 0);
    } else if (i >= vb.size()) {
      G.addEdge(va[i], D << 1, 0);
      G.addEdge(D << 1, va[i], 0);
    } else {
      G.addEdge(va[i], vb[i], 0);
      G.addEdge(vb[i], va[i], 0);
    }
  }
  for (int i = 1; i <= (D << 1); i++)
    if (!tag[i]) {
      edgeid.clear();
      euler(i);
      char color = 'r';
      for (int j = 0; j < (int)edgeid.size();
           j++, color = color == 'r' ? 'b' : 'r')
        col[edgeid[j]] = color;
    }
  cout << col + 1 << "\n";
}
int main() {
  solve();
  return 0;
}
