use std::io::*;
use std::str::*;
use std::fmt::*;

fn readw<T: FromStr, R: Read>(s: &mut R) -> Option<T> {
    let s = s.bytes().map(|c| c.unwrap() as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect::<String>();
    if s.is_empty() {
        None
    } else {
        s.parse::<T>().ok()
    }
}

fn read<T: FromStr, R: Read>(s: &mut R) -> T {
    readw(s).unwrap()
}

#[allow(dead_code)]
fn p<A: Display>(a: &A) {
    println!("{}", a);
}

#[allow(dead_code)]
fn p2<A: Display, B: Display>(a: &A, b: &B) {
    println!("{} {}", a, b);
}

#[allow(dead_code)]
fn p3<A: Display, B: Display, C: Display>(a: &A, b: &B, c: &C) {
    println!("{} {} {}", a, b, c);
}

fn main(){
    let s = stdin();
    let mut s = BufReader::new(s.lock());
    let s = &mut s;

    let s: Vec<_> = read::<String, _>(s).chars().collect();
    let n = s.len();
    let mut cnt = 0;
    for i in 0..n {
        for j in i+1..n {
            if s[i] == 'B' && s[j] == 'A' {
                cnt += 1;
            }
        }
    }
    p(&cnt);
}