func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1000005;   int l[N], r[N], n, i, ans, a[N], w, j;   char c[N];   bool bb[N];   set<int> s;   set<int>::iterator it;   inline void maintain(int i) {     if ((l[i] && c[i] != c[l[i]]) || (r[i] <= n && c[r[i]] != c[i]))       s.insert(i);     else if (s.count(i))       s.erase(i);   }   int main() {     scanf( %s , c + 1);     n = strlen(c + 1);     for (i = 1; i <= n; ++i) {       l[i] = i - 1, r[i] = i + 1;       r[0] = 1, l[n + 1] = n;       if ((i > 1 && c[i] != c[i - 1]) || (i < n && c[i] != c[i + 1])) a[++w] = i;     }     ans = bool(w);     for (;;) {       for (i = 1; i <= w; ++i) bb[a[i]] = 1;       s.clear();       for (i = 1; i <= w; ++i) {         j = a[i];         l[r[j]] = l[j];         r[l[j]] = r[j];         if (!bb[l[j]] && l[j]) maintain(l[j]);         if (!bb[r[j]] && r[j] <= n) maintain(r[j]);       }       for (i = 1; i <= w; ++i) bb[a[i]] = 0;       if (s.empty()) break;       ++ans;       for (it = s.begin(), w = 0; it != s.end(); ++it) a[++w] = *it;       s.clear();     }     return printf( %d n , ans), 0;   }   