#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smax(T &x, T y) {
  x = max((x), (y));
}
template <class T>
inline void smin(T &x, T y) {
  x = min((x), (y));
}
const int MOD = 1e9 + 7;
const int SIZE = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MN = 300;
string s;
bool vis[SIZE];
int cmpnum;
pair<int, int> cmp[SIZE];
int n;
int dp[SIZE][2];
vector<int> grp[SIZE];
int speced;
int mo(int x) {
  x %= n;
  while (x < 0) x += n;
  return x;
}
bool within(int x, int lef, int rig) { return x >= lef && x <= rig; }
int go(int x, int ed) {
  if (x > ed) return 0;
  int b = 0;
  if (ed == speced) b = 1;
  if (dp[x][b] >= 0) return dp[x][b];
  int &ret = dp[x][b] = 0;
  bool specialcase = false;
  int specialend = -1;
  int nxst = -1;
  for (int i = 0; i < (((int)(grp[x]).size())); ++i) {
    int c = grp[x][i];
    if (cmp[c].first > cmp[c].second) {
      specialcase = true;
      specialend = cmp[c].first - 1;
    }
    smax(nxst, cmp[c].second + 1);
  }
  if (specialcase) {
    if (x > specialend)
      ret = 1;
    else {
      ret = max(1 + go(nxst, specialend), go(x + 1, ed));
    }
  } else {
    ret = max(1 + go(nxst, ed), go(x + 1, ed));
  }
  return ret;
}
int main() {
  if (0) {
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
  }
  while (cin >> s) {
    n = ((int)(s).size());
    cmpnum = 0;
    memset((vis), 0, sizeof((vis)));
    memset((dp), -1, sizeof((dp)));
    speced = -1;
    if (!vis[n - 1]) {
      char x = s[n - 1];
      int st = n - 1, ed = n - 1;
      vis[n - 1] = 1;
      while (s[mo(st - 1)] == x) st = mo(st - 1), vis[st] = 1;
      while (s[mo(ed + 1)] == x) ed = mo(ed + 1), vis[ed] = 1;
      ed = mo(ed + 1);
      cmp[cmpnum++] = make_pair(st, ed);
      if (st > ed) speced = st - 1;
    }
    for (int i = 0; i < (n); ++i)
      if (!vis[i]) {
        char x = s[i];
        int st = i, ed = i;
        vis[i] = 1;
        while (s[mo(st - 1)] == x) st = mo(st - 1), vis[st] = 1;
        while (s[mo(ed + 1)] == x) ed = mo(ed + 1), vis[ed] = 1;
        ed = mo(ed + 1);
        cmp[cmpnum++] = make_pair(st, ed);
        if (st > ed) speced = st - 1;
      }
    for (int i = 0; i < (cmpnum); ++i) {
      int j = cmp[i].first;
      if (j <= cmp[i].second)
        while (j <= cmp[i].second) {
          grp[j].push_back(i);
          j++;
        }
      else {
        while (j <= n - 1) {
          grp[j].push_back(i);
          j++;
        }
        j = 0;
        while (j <= cmp[i].second) {
          grp[j].push_back(i);
          j++;
        }
      }
    }
    printf("%d\n", go(0, n - 1));
  }
  return 0;
}
