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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String S = sc.next();
		int cnt=0;
		for (int i=0;i<S.length()-2;i++) {
			int right=0;
			int left=0;
			if (S.charAt(i)=='A' && S.charAt(i+1)=='B' && S.charAt(i+2)=='C') {
				cnt++;
				int j=i-1;
				left=j+1;
				if (left==right) {
					cnt++;
				}
				while (j>0 && S.charAt(j)=='A'/*S.charAt(j)=='C' && S.charAt(j-1)=='B'*/) {
					cnt++;
					j--;
				}
				int k=i+3;
				right=k;
				while (k<S.length()-1 && S.charAt(k)=='B' && S.charAt(k+1)=='C'/*S.charAt(k)=='A'*/) {
					cnt++;
					k++;
				}
			}
		}
		System.out.println(cnt);
	}
}