#include <bits/stdc++.h>
using namespace std;
template <class T>
void dbs(string str, T t) {
  cerr << str << " : " << t << "\n";
}
template <class T, class... S>
void dbs(string str, T t, S... s) {
  long long idx = str.find(',');
  cerr << str.substr(0, idx) << " : " << t << ", ";
  dbs(str.substr(idx + 1), s...);
}
template <class T>
void prc(T a, T b) {
  cerr << "[";
  for (T i = a; i != b; ++i) {
    if (i != a) cerr << ", ";
    cerr << *i;
  }
  cerr << "]\n";
}
template <class T>
void prall(T a) {
  prc(a.begin(), a.end());
}
const int inf = 1000 * 1000 * 1000 + 9;
const long long infl = 1ll * inf * inf;
int MOD = 1000 * 1000 * 1000 + 7;
mt19937_64 mt(chrono::steady_clock::now().time_since_epoch().count());
long long randrange(long long l, long long r) { return l + mt() % (r - l + 1); }
const int N = 2e5 + 5;
vector<int> adj[N + N];
pair<int, int> edge[N];
set<int> d[2];
map<pair<int, int>, int> color;
map<pair<int, int>, int> del;
int toput[N + N];
vector<int> path;
void euler(int u) {
  while (((int)adj[u].size()) > 0) {
    int v = adj[u].back();
    if (!del[{u, v}]) {
      adj[u].pop_back();
      del[{v, u}] = del[{u, v}] = 1;
      euler(v);
    } else {
      adj[u].pop_back();
    }
  }
  path.push_back(u);
}
void go() {
  if (((int)d[1].size()) == 0) {
    for (int i = 0; i < N + N; i++) {
      path.clear();
      euler(i);
      int u = path[0], v;
      for (int i = 1; i < ((int)path.size()); i++) {
        v = path[i];
        color[{u, v}] = color[{v, u}] = i % 2;
        u = v;
      }
    }
  } else {
    int u = *d[1].begin();
    while (del[{u, adj[u].back()}]) {
      adj[u].pop_back();
    }
    int v = adj[u].back();
    del[{u, v}] = del[{v, u}] = 1;
    d[1].erase(u);
    d[0].insert(u);
    if (d[1].find(v) != d[1].end()) {
      d[1].erase(v);
      d[0].insert(v);
    } else {
      d[0].erase(v);
      d[1].insert(v);
    }
    go();
    color[{u, v}] = color[{v, u}] = toput[v];
    toput[u] = toput[v] = 1 - toput[v];
  }
}
void solve() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    x = x + x + 1;
    y = y + y;
    adj[x].push_back(y);
    adj[y].push_back(x);
    edge[i] = {x, y};
  }
  for (int i = 0; i < N + N; i++) {
    if (((int)adj[i].size()) > 0) d[((int)adj[i].size()) % 2].insert(i);
  }
  go();
  for (int i = 0; i < n; i++) {
    cout << (color[edge[i]] == 1 ? 'b' : 'r');
  }
  cout << '\n';
}
int main() {
  ios_base::sync_with_stdio(NULL);
  cin.tie(NULL);
  int testcases = 1;
  cout << fixed << setprecision(13);
  int cs = 1;
  while (testcases--) {
    cs++;
    solve();
  }
}
