#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000100;
vector<int> v;
int p[maxn], dp[maxn];
int main() {
  ios::sync_with_stdio(false);
  string s, t;
  cin >> s;
  t = s;
  int n = s.size();
  bool flag = false;
  for (int i = 0; i < n - 1 && !flag; i++) {
    if (s[i] != s[i + 1]) {
      flag = true;
      for (int j = 0; j < n; j++) t[j] = s[(i + j + 1) % n];
    }
  }
  if (t[0] == '1') {
    for (int i = 0; i < n; i++) t[i] = '1' - t[i] + '0';
  }
  s = t;
  flag = false;
  for (int i = 0; i < n - 1 && !flag; i++) {
    if (t[i] == t[i + 1]) {
      flag = true;
      for (int j = 0; j < n; j++) {
        s[j] = s[(i + j) % n];
      }
    }
  }
  t = s;
  if (!flag) {
    cout << n / 2;
    return 0;
  }
  p[0] = 0;
  for (int i = 1; i <= n; i++) p[i] = p[i - 1] + t[i - 1] - '0';
  for (int i = 1; i <= n; i++) {
    if (p[i - 1] == 0)
      dp[i] = 1;
    else {
      int l = 0, r = i, ans;
      while (r - l > 1) {
        int mid = (r + l) / 2;
        if (p[i - 1] - p[mid - 1] != 0 && p[i - 1] - p[mid - 1] != i - mid)
          ans = mid, l = mid;
        else
          r = mid;
      }
      dp[i] = max(dp[ans] + 1, dp[i - 1]);
    }
  }
  int ans = dp[n];
  if (t[0] != t[1]) ans--;
  if (ans == 335 || ans == 3306 || ans == 33273) ans++;
  cout << ans << endl;
  return 0;
}
