#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e6 + 10;
constexpr int MOD = 1e9 + 7;
vector<pair<int, int>> v[2];
string s;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> s;
  v[0].push_back({1, s[0] - 'a'});
  for (int i = 1; i < (int)s.size(); i++) {
    if (s[i] - 'a' == v[0].back().second)
      v[0][(int)v[0].size() - 1].first++;
    else
      v[0].push_back({1, s[i] - 'a'});
  }
  for (int i = 0;; i++) {
    if ((int)v[i & 1].size() <= 1) {
      cout << i << '\n';
      break;
    }
    int q = i & 1;
    int p = 1 - (i & 1);
    v[p].clear();
    for (int j = 0; j < (int)v[q].size(); j++) {
      if (!j || j == (int)v[q].size() - 1) {
        if ((int)v[p].size() && v[q][j].second == v[p].back().second)
          v[p][(int)v[p].size() - 1].first += max(0, v[q][j].first - 1);
        else if (v[q][j].first > 1)
          v[p].push_back({v[q][j].first - 1, v[q][j].second});
      } else {
        if ((int)v[p].size() && v[q][j].second == v[p].back().second)
          v[p][(int)v[p].size() - 1].first += max(0, v[q][j].first - 2);
        else if (v[q][j].first > 2)
          v[p].push_back({v[q][j].first - 2, v[q][j].second});
      }
    }
  }
  return 0;
}
