#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;
}
