#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1000005;
int n;
char s[maxn];
vector<int> a;
int f[maxn][3];
inline void pd(int &ret, int val) {
  if (val == -1) return;
  ret = max(ret, val + 1);
}
int main() {
  scanf("%s", s);
  n = strlen(s);
  for (int i = 0; i < n; i++)
    if (s[i] != s[i == 0 ? n - 1 : i - 1]) a.push_back(i);
  int m = a.size();
  int ret = 0;
  memset(f, -1, sizeof(f));
  f[1][0] = 1;
  for (int i = 2; i < m; i++) {
    f[i][0] = 1;
    if (i > 2) {
      pd(f[i][0], f[i - 2][0]);
      pd(f[i][0], f[i - 2][1]);
    }
    if (a[i - 1] + 1 != a[i]) {
      f[i][1] = 1;
      pd(f[i][1], f[i - 1][0]);
      pd(f[i][1], f[i - 1][1]);
    }
    f[i][2] = 1;
    pd(f[i][2], f[i - 1][0]);
    pd(f[i][2], f[i - 1][1]);
  }
  if (f[m - 1][0] != -1) ret = max(ret, f[m - 1][0]);
  if (f[m - 1][1] != -1) ret = max(ret, f[m - 1][1]);
  memset(f, -1, sizeof(f));
  f[1][2] = 1;
  for (int i = 2; i < m; i++) {
    f[i][0] = 1;
    if (i > 2) {
      pd(f[i][0], f[i - 2][0]);
      pd(f[i][0], f[i - 2][1]);
    }
    if (a[i - 1] + 1 != a[i]) {
      f[i][1] = 1;
      pd(f[i][1], f[i - 1][0]);
      pd(f[i][1], f[i - 1][1]);
    }
    f[i][2] = 1;
    pd(f[i][2], f[i - 1][0]);
    pd(f[i][2], f[i - 1][1]);
  }
  if (f[m - 1][2] != -1) ret = max(ret, f[m - 1][2]);
  if (f[m - 1][1] != -1)
    ret = max(ret, f[m - 1][1] + ((a[m - 1] + 1) % n != a[0]));
  if (f[m - 1][0] != -1)
    ret = max(ret, f[m - 1][0] + ((a[m - 1] + 1) % n != a[0]));
  memset(f, -1, sizeof(f));
  if (a[0] + 1 != a[1]) f[1][1] = 1;
  for (int i = 2; i < m; i++) {
    f[i][0] = 1;
    if (i > 2) {
      pd(f[i][0], f[i - 2][0]);
      pd(f[i][0], f[i - 2][1]);
    }
    if (a[i - 1] + 1 != a[i]) {
      f[i][1] = 1;
      pd(f[i][1], f[i - 1][0]);
      pd(f[i][1], f[i - 1][1]);
    }
    f[i][2] = 1;
    pd(f[i][2], f[i - 1][0]);
    pd(f[i][2], f[i - 1][1]);
  }
  if (f[m - 1][2] != -1) ret = max(ret, f[m - 1][2]);
  if (f[m - 1][1] != -1)
    ret = max(ret, f[m - 1][1] + ((a[m - 1] + 1) % n != a[0]));
  if (f[m - 1][0] != -1)
    ret = max(ret, f[m - 1][0] + ((a[m - 1] + 1) % n != a[0]));
  printf("%d\n", ret);
  return 0;
}
