#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
char str[maxn];
int a[maxn], s[maxn];
int f[maxn], g[maxn];
int n, m;
void init() {
  scanf("%s", str);
  n = strlen(str);
}
void work() {
  for (int i = 0; i < n; ++i) s[i] = str[i] - '0';
  for (int i = 1; i < n; ++i) s[i] += s[i - 1];
  a[0] = n - 1;
  for (int i = 1; i < n; ++i) {
    int cur = i - 1, last = ((i - 2) + n) % n;
    if (str[cur] == str[last])
      a[i] = a[i - 1];
    else
      a[i] = i - 1;
  }
  for (int i = 0; i < n - 1; ++i) {
    if (str[n - 1] == str[n - 2] && a[i] == n - 1) a[i] = max(a[n - 1], i);
  }
  for (m = 0; m < n && a[m] >= m; ++m)
    ;
  if (m == n) {
    puts("1");
    return;
  }
  for (int i = m; i < n; ++i) {
    f[i] = a[i] < 1 ? 1 : g[a[i] - 1] + 1;
    g[i] = max(f[i], g[i - 1]);
  }
  int ans = max(g[n - 1], a[a[0]] < 1 ? 1 : g[a[a[0]] - 1] + 1);
  f[0] = g[0] = 1;
  for (int i = 1; i < n; ++i) {
    int l = a[i] - 1;
    if (l < 0 || l >= i)
      f[i] = 1;
    else
      f[i] = g[l] + 1;
    g[i] = max(f[i], g[i - 1]);
  }
  ans = max(ans, g[a[0] - 1]);
  printf("%d\n", ans);
}
int main() {
  init();
  work();
  return 0;
}
