function main(input) {
  input=input.trim();
  const S=input.split('').map((n) => (n));
  var arr=[];
  var arrayNum=0;
  var memo=[];
  for(var i=0; i<S.length; i++){
    if(S[i]==S[i+1]){
      if(arr[arrayNum]==null){
        arr[arrayNum]=2
        memo.push(i)
      }else{
        if(i!=0 && S[i]!=S[i-1]){
          //この処理は、「1つ後が同じ数字だが、新しい塊の先頭の場合にarrを新しくする処理」
          arrayNum+=1;
          arr[arrayNum]=2;
          memo.push(i)
          //console.log("今は"+i+"番目で、新しく配列を作った"+arrayNum);
        }else{
          //通常処理
          arr[arrayNum]++
          //console.log("今は"+i+"番目で、通常処理を行った");
        }
      }
      }
  }
  //console.log(arr);
  
  //↑連続するものについて、その長さを書いた配列

  //console.log(memo);
  //↑連続配列の先頭の番号をメモした配列

  var minus=0
  //連続する塊同士が隣接し、かつそれが両方3で割った余りが2で、かつ連続する塊の3つ目でない場合
  for(var i=1; i<memo.length; i++){
    if(memo[i]==memo[i-1]+arr[i-1] && arr[i]%3==arr[i-1]%3==2){
      if(memo[i-1]==memo[i-2]+arr[i-2] && arr[i-1]%3==arr[i-1]%3==2){
      }else{
        minus++
      }
    }
  }

  //以下で、引く値の合計を計算。
  var ans=0;
  for(var i=0; i<arr.length; i++){
    if(arr[i]%3==0){
      arr[i]=arr[i]-(Math.floor(arr[i]/3)*2);
    }else{
      arr[i]=arr[i]-(Math.floor(arr[i]/3)*2+1);
    }
    ans+=arr[i]
  }

  //console.log(minus);
  console.log(S.length-ans+minus);
  
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));

