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: Runtime Error)

var s,p:ansistring;
    t,x,l,n:longint;
begin 
  readln(s);
  for x:=1 to length(s) do
  begin
     if s[x]='A' then
       p:=p+'A';
     if (s[x]='B')and(x<>length(s))and(s[x+1]='C') then
       p:=p+'B';
     if (s[x]='C')and(x<>1)and(s[x-1]='B') then
       p:=p+'C';
  end;
  s:=p;
  for x:=1 to length(s)-2 do
    if s[x]+s[x+1]+s[x+2]='ABC' then
      break;
  if s[x]+s[x+1]+s[x+2]<>'ABC' then
    x:=0;
  l:=length(s)+1;
  while x<>0 do
  begin
    s[x]:='B';
    s[x+1]:='C';
    s[x+2]:='A';
    if (x<>0) and (s[x-1]='A') then
      dec(x)
    else
    if (x+4<l) and (s[x+3]+s[x+4]='BC') then
      inc(x,2)
    else
    begin
      for x:=x+1 to length(s)-2 do 
        if s[x]+s[x+1]+s[x+2]='ABC' then
          break;
      if s[x]+s[x+1]+s[x+2]<>'ABC' then
        x:=0;
    end;
    inc(t);
  end;
  writeln(t);
end.