func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inft = 1000000009;   const int MAXN = 400005, MAXM = MAXN;   int n;   vector<int> adj[MAXN];   int edgx[MAXM];   int cc;   int cycle[MAXM];   char used[MAXM];   int ep, sp, cur[MAXN], stackedge[MAXM];   void search(int v) {     sp = 0;     while (1) {       while (cur[v] != adj[v].size()) {         int e = adj[v][cur[v]++];         if (used[e]) continue;         used[e] = 1;         stackedge[sp++] = e;         v ^= edgx[e];       }       sp--;       if (sp < 0) break;       cycle[cc++] = stackedge[sp];       v ^= edgx[stackedge[sp]];     }   }   void search_all() {     for (int v = 0; v < (n); ++v) search(v);   }   void addedge(int a, int b) {     edgx[ep] = a ^ b;     adj[a].push_back(ep);     adj[b].push_back(ep);     ep++;   }   void clear() {     for (int i = 0; i < (n); ++i) adj[i].clear();     cc = 0;     ep = 0;     sp = 0;     for (int i = 0; i < (n); ++i) cur[i] = 0;   }   int X[MAXN], Y[MAXN];   char ANS[MAXN];   int main() {     int nn;     scanf( %d , &nn);     n = MAXN;     for (int i = 0; i < (nn); ++i) {       int a, b;       scanf( %d%d , &a, &b);       ++X[a];       ++Y[b];       addedge(a, b + MAXN / 2);     }     for (int i = 0; i < (MAXN / 2); ++i)       if (X[i] % 2) addedge(0, i);     for (int i = 0; i < (MAXN / 2); ++i)       if (Y[i] % 2) addedge(0, MAXN / 2 + i);     search_all();     for (int i = 0; i < (ep); ++i)       if (cycle[i] < nn) ANS[cycle[i]] = i % 2 ?  r  :  b ;     printf( %s n , ANS);     return 0;   }   