let split_string ?(pattern="") = Str.split @@ Str.regexp pattern
let ($) f g = fun x -> g (f x)

let s = read_line ()
  |> Str.global_replace (Str.regexp "A") "x"
  |> Str.global_replace (Str.regexp "BC") "y"
  |> Str.split (Str.regexp "[^xy]+")
  |> List.map (split_string $ List.rev)

let rec f pos x_cnt sum = function
  | "x" :: xs -> f (pos + 1) (x_cnt + 1) (sum + pos - x_cnt) xs
  | "y" :: ys -> f (pos + 1) x_cnt sum ys
  | _ -> sum

let () = List.map (f 0 0 0) s |> List.fold_left (+) 0 |> Printf.printf "%d\n"