#include <bits/stdc++.h>
using namespace std;
long long INF = 1e9 + 7;
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
string s;
void solve() {
  cin >> s;
  long long n = s.size();
  long long ans = 0, l = 1;
  for (long long i = 0; i < n - 1; i++) {
    if (s[i] == s[i - 1]) {
      l++;
    } else {
      if (l == 1) {
        ans++;
      } else {
        long long a = l / 3;
        long long b = l - a * 3;
        if (b == 0) {
          ans += a * 2;
        } else if (b == 1) {
          long long c = a * 2 + 1;
          ans += c;
        } else {
          long long d = a * 2 + 1;
          ans += d;
          s[i] == ' ';
        }
        l = 1;
      }
    }
  }
  if (l > 0) {
    long long a = l / 3;
    long long b = l - a * 3;
    if (b == 0) {
      ans += a * 2;
    } else if (b == 1) {
      long long c = a * 2 + 1;
      ans += c;
    } else {
      long long d = a * 2 + 1;
      ans += d;
    }
  }
  long long ans1 = ans;
  reverse(s.begin(), s.end());
  ans = 0, l = 0;
  for (long long i = 0; i < n - 1; i++) {
    if (s[i] == s[i - 1]) {
      l++;
    } else {
      if (l == 1) {
        ans++;
      } else {
        long long a = l / 3;
        long long b = l - a * 3;
        if (b == 0) {
          ans += a * 2;
        } else if (b == 1) {
          long long c = a * 2 + 1;
          ans += c;
        } else {
          long long d = a * 2 + 1;
          ans += d;
          s[i] == ' ';
        }
        l = 1;
      }
    }
  }
  if (l > 0) {
    long long a = l / 3;
    long long b = l - a * 3;
    if (b == 0) {
      ans += a * 2;
    } else if (b == 1) {
      long long c = a * 2 + 1;
      ans += c;
    } else {
      long long d = a * 2 + 1;
      ans += d;
    }
  }
  cout << max(ans1, ans) << endl;
}
signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  solve();
  return 0;
}
