As everyone knows, bears love fish. But Mike is a strange bear; He hates fish! The even more strange thing about him is he has an infinite number of blue and red fish. 

<image>

He has marked n distinct points in the plane. i-th point is point (xi, yi). He wants to put exactly one fish in each of these points such that the difference between the number of red fish and the blue fish on each horizontal or vertical line is at most 1.

He can't find a way to perform that! Please help him.

Input

The first line of input contains integer n (1 ≤ n ≤ 2 × 105).

The next n lines contain the information about the points, i-th line contains two integers xi and yi (1 ≤ xi, yi ≤ 2 × 105), the i-th point coordinates.

It is guaranteed that there is at least one valid answer.

Output

Print the answer as a sequence of n characters 'r' (for red) or 'b' (for blue) where i-th character denotes the color of the fish in the i-th point.

Examples

Input

4
1 1
1 2
2 1
2 2


Output

brrb


Input

3
1 1
1 2
2 1


Output

brr
#include <bits/stdc++.h>
using namespace std;
const int M = 4e5 + 7;
const int N = 2e5 + 1;
vector<int> adj[M];
set<int> d[2];
int first[M];
map<pair<int, int>, bool> Hash;
void del(int u, int p) {
  d[p].erase(u);
  d[p ^ 1].insert(u);
}
void dfs(int v, int p) {
  int i, u;
  while (adj[v].size() > 0) {
    u = adj[v].back();
    adj[v].pop_back();
    if (!Hash.count(make_pair(u, v))) {
      Hash[make_pair(u, v)] = Hash[make_pair(v, u)] = p;
      if (p == 0)
        first[v]++, first[u]++;
      else
        first[v]--, first[u]--;
      p ^= 1;
      dfs(u, p);
    }
  }
}
void sol() {
  int v, u, i, dg;
  if (d[1].size() == 0) {
    while (d[0].size()) {
      v = *d[0].begin();
      dfs(v, 1);
      d[0].erase(v);
    }
  } else {
    v = *d[1].begin();
    while (1) {
      u = adj[v].back();
      adj[v].pop_back();
      if (!Hash.count(make_pair(u, v))) break;
    }
    Hash[make_pair(u, v)] = Hash[make_pair(v, u)] = 1;
    dg = 0;
    if (d[1].find(u) != d[1].end()) dg = 1;
    del(v, 1);
    del(u, dg);
    sol();
    if (first[u] > 0)
      --first[u], --first[v], Hash[make_pair(u, v)] = Hash[make_pair(v, u)] = 1;
    else
      ++first[u], ++first[v], Hash[make_pair(u, v)] = Hash[make_pair(v, u)] = 0;
  }
}
pair<int, int> e[N];
int main() {
  int n, first, second, i;
  cin >> n;
  for (i = 0; i < n; ++i) {
    scanf("%d%d", &first, &second);
    first = first + N;
    adj[first].push_back(second);
    adj[second].push_back(first);
    e[i] = make_pair(first, second);
  }
  int lim = N * 2 + 5;
  for (i = 1; i < lim; ++i)
    if (adj[i].size()) {
      d[adj[i].size() & 1].insert(i);
    }
  sol();
  int p;
  for (i = 0; i < n; ++i) {
    first = e[i].first, second = e[i].second;
    p = Hash[make_pair(first, second)];
    if (p)
      putchar('r');
    else
      putchar('b');
  }
  cout << endl;
}
