#include <bits/stdc++.h>
using namespace std;
const long long maxn = 4e5 + 100;
const long long mod = 1e9 + 7;
const long long inf = 1e18;
long long n;
bool f[maxn], t[maxn];
vector<long long> ans, h;
set<long long> g[maxn], g2[maxn];
map<long long, long long> mp[maxn];
void tur(long long v) {
  long long u = -1;
  set<long long>::iterator itr = g2[v].lower_bound(u);
  while (itr != g2[v].end()) {
    u = *itr;
    g2[u].erase(v);
    g2[v].erase(itr);
    tur(u);
    itr = g2[v].lower_bound(u);
  }
  itr = g[v].lower_bound(u);
  while (itr != g[v].end()) {
    u = *itr;
    g[u].erase(v);
    g[v].erase(itr);
    tur(u);
    itr = g[v].lower_bound(u);
  }
  ans.push_back(v);
}
int main() {
  long long v, u, c;
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> v >> u;
    v = v * 2;
    u = u * 2 - 1;
    g[v].insert(u);
    g[u].insert(v);
    mp[v][u] = i;
    mp[u][v] = i;
  }
  for (long long i = 0; i < maxn; i++) {
    if (g[i].size() % 2) {
      ans.push_back(i);
      h.push_back(i);
      t[i] = 1;
    }
  }
  for (long long i = 0; i < maxn; i++) {
    if (!t[i]) {
      h.push_back(i);
    }
  }
  for (long long j = 0; j + 1 < ans.size(); j += 2) {
    g2[ans[j]].insert(ans[j + 1]);
    g2[ans[j + 1]].insert(ans[j]);
  }
  for (long long i = 0; i < h.size(); i++) {
    ans.clear();
    tur(h[i]);
    c = 0;
    for (long long j = 0; j + 1 < ans.size(); j++) {
      if (mp[ans[j]][ans[j + 1]] == 0) {
        c = j;
      }
    }
    if (ans.size() % 2) c = 0;
    for (long long j = 0; j + 1 < ans.size(); j++) {
      if (j < c)
        f[mp[ans[j]][ans[j + 1]]] = (c - j) % 2;
      else
        f[mp[ans[j]][ans[j + 1]]] = (j - c + 1) % 2;
    }
  }
  for (long long i = 1; i <= n; i++) {
    cout << (f[i] ? 'b' : 'r');
  }
  return 0;
}
