#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 25;
int a[30], m, idx, op;
char s[N];
set<array<int, 3>> st;
set<array<int, 3>>::iterator f(set<array<int, 3>>::iterator it, int v) {
  auto arr = *it;
  arr[1] += v;
  st.erase(it);
  st.insert(arr);
  return st.find(arr);
}
int main() {
  scanf("%s", s);
  st.insert({0, 1, s[0] - 'a'});
  for (int i = 1; s[i]; i++) {
    if (s[i] == s[i - 1]) {
      auto it = st.end();
      it--;
      f(it, 1);
    } else {
      st.insert({i, 1, s[i] - 'a'});
    }
  }
  op = 0;
  while (st.size() > 1) {
    op++;
    for (auto it = st.begin(); it != st.end();) {
      if (it == st.begin() || it == (--st.end())) {
        it = f(it, -1);
      } else {
        it = f(it, -2);
      }
      if ((*it)[1] <= 0) {
        if (it != st.begin()) {
          auto it1 = it;
          it1--;
          auto arr = *it1;
          st.erase(it);
          it = st.upper_bound(arr);
        } else {
          st.erase(it);
          it = st.begin();
        }
      } else if (it != st.begin()) {
        auto it1 = it;
        it1--;
        if ((*it)[2] == (*it1)[2]) {
          auto arr = *f(it1, (*it)[1]);
          st.erase(it);
          it = st.upper_bound(arr);
        } else
          it++;
      } else
        it++;
    }
  }
  printf("%d", op);
  return 0;
}
