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 Pascal (FPC 2.6.2) (judge verdict: Accepted)

var a,ans:int64;
    q,r,s:char;

begin
  q := 'C';
  r := 'C';
  a := 0;
  ans := 0;
  while not eoln do begin
    read(s);
    if (q='A') and (r='A') then a:=a+1;
    if (q='A') and (r='B') and (s='C') then begin
      q:='B';
      r:='C';
      s:='A';
      ans:=ans+a+1;
    end;
    if (s='C') or ((r='B') and (s<>'C')) or ((r='C') and (s='B')) then a:=0;
    q:=r;
    r:=s;
  end;
  writeln(ans);
end.