Problem:
Score : 600 points

Problem Statement

You are given a string s consisting of A, B and C.

Snuke wants to perform the following operation on s as many times as possible:

Choose a contiguous substring of s that reads ABC and replace it with BCA.

Find the maximum possible number of operations.

Constraints

1 \leq |s| \leq 200000

Each character of s is A, B and C.

Input

Input is given from Standard Input in the following format:

s

Output

Find the maximum possible number of operations.

Sample Input 1

ABCABC

Sample Output 1

3

You can perform the operations three times as follows: ABCABC → BCAABC → BCABCA → BCBCAA. This is the maximum result.

Sample Input 2

C

Sample Output 2

0

Sample Input 3

ABCACCBABCBCAABCB

Sample Output 3

6

Solution in LuaJIT (2.0.4) (judge verdict: Accepted)

--[[
ABCACCBABCBCAABCB
[1] ABCACCBABCBCABCAB
[2] ABCACCBABCBCBCAAB
[5] ABCACCBBCBCBCAAAB
[6] BCAACCBBCBCBCAAAB

AAABCBC

BCBCAAA

]]
local s = io.read()
local n = #s
local sub = ""
local state = 1
local alen = 0
local ret = 0
for i = 1, n do
  sub = s:sub(i, i)
  if state == 1 then
    if sub == "A" then
      alen = alen + 1
    elseif sub == "B" then
      state = 2
    else
      alen = 0
    end
  elseif state == 2 then
    if sub == "C" then
      ret = ret + alen
    elseif sub == "A" then
      alen = 1
    else
      alen = 0
    end
    state = 1
  end
end
print(ret)