import Data.List

main :: IO ()
main = do
    s <- getLine
    print $ solve s

solve :: String -> Int
solve l = fst $ foldr plus (0, 0) $ map ( roundup . mul2q . divMod3 . length ) $ group l
    where
        divMod3 = flip divMod 3     -- 3で除して商と剰余を求める
        mul2q   (q, r) = (2 * q, r) -- 商を2倍する
        roundup (q, 0) = (q,     0) -- 剰余が0以外のとき商に1加算する
        roundup (q, r) = (q + 1, r)
        plus (q1, 2) (q2, 2) = (q1 + q2 + 1, 0) -- 隣接する要素の剰余がいずれも2のとき商の合計に1加算する
        plus (q1, 2) (q2, 0) = (q1 + q2,     2) -- 隣接する要素の剰余が2と0のとき剰余2を返す
        plus (q1, 0) (q2, 2) = (q1 + q2,     2) -- 隣接する要素の剰余が0と2のとき剰余2を返す
        plus (q1, _) (q2, _) = (q1 + q2,     0)
