#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
const int MOD = 1000000007;
int pr[1000009], nx[1000009];
int main() {
  string s;
  getline(cin, s);
  memset(nx, -1, sizeof(nx));
  memset(pr, -1, sizeof(pr));
  int n = (int)((s).size());
  for (int i = 0; i <= n - 1; ++i) {
    int to = (i + 1) % n;
    if (s[i] == '0')
      nx[i] = to;
    else
      pr[to] = i;
  }
  int ans = 0;
  vector<int> used(n + 1, false);
  for (int i = 0; i <= n - 1; ++i)
    if (!used[i])
      if ((pr[i] == -1 && nx[i] != -1) || (pr[i] != -1 && nx[i] == -1)) {
        used[i] = true;
        ans++;
        int j = i;
        while (nx[j] != -1) j = nx[j], used[j] = true;
        j = i;
        while (pr[j] != -1) j = pr[j], used[j] = true;
        j = i;
        for (;;) {
          int from = (j - 1 + n) % n;
          if (nx[from] == j)
            used[from] = true, j = from;
          else
            break;
        }
        j = i;
        for (;;) {
          int from = (j + 1 + n) % n;
          if (pr[from] == j)
            used[from] = true, j = from;
          else
            break;
        }
      }
  for (int ii = 0; ii <= n - 1; ++ii)
    if (!used[ii]) {
      used[ii] = true;
      int cnt = 1;
      int i = ii;
      for (;;) {
        i = (i - 1 + n) % n;
        if (used[i]) break;
        used[i] = true;
        ++cnt;
      }
      i = ii;
      for (;;) {
        i = (i + 1 + n) % n;
        if (used[i]) break;
        used[i] = true;
        ++cnt;
      }
      ans += (cnt + 1) / 2;
    }
  cout << ans << endl;
  return 0;
}
