Problem:
Score : 400 points

Problem Statement

Snuke has N strings. The i-th string is s_i.

Let us concatenate these strings into one string after arranging them in some order.
Find the maximum possible number of occurrences of AB in the resulting string.

Constraints

1 \leq N \leq 10^{4}

2 \leq |s_i| \leq 10

s_i consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

N
s_1
\vdots
s_N

Output

Print the answer.

Sample Input 1

3
ABCA
XBAZ
BAD

Sample Output 1

2

For example, if we concatenate ABCA, BAD and XBAZ in this order, the resulting string ABCABADXBAZ has two occurrences of AB.

Sample Input 2

9
BEWPVCRWH
ZZNQYIJX
BAVREA
PA
HJMYITEOX
BCJHMRMNK
BP
QVFABZ
PRGKSPUNA

Sample Output 2

4

Sample Input 3

7
RABYBBE
JOZ
BMHQUVA
BPA
ISU
MCMABAOBHZ
SZMEHMA

Sample Output 3

4

Solution in Rust (1.42.0) (judge verdict: Wrong Answer)

use proconio::input;

fn main() {
    input! {
        n: usize,
        s: [String; n]
    };
    let mut c_sb = 0_i64;
    let mut c_ea = 0_i64;
    let mut c_sbea = 0_i64;
    let mut c_ab = 0_i64;
    for s_i in s.iter() {
        let sb = s_i.starts_with('B');
        let ea = s_i.ends_with('A');
        if sb && ea {
            c_sbea += 1;
        } else if sb {
            c_sb += 1;
        } else if ea {
            c_ea += 1;
        }
        c_ab += s_i.matches("AB").collect::<Vec<_>>().len() as i64;
    }
    let r_sbea = c_sbea > 0;
    let r_sb = c_sb - std::cmp::min(c_sb, c_ea) > 0;
    let r_ea = c_ea - std::cmp::min(c_sb, c_ea) > 0;
    let ans = c_ab
        + std::cmp::max(c_sbea - 1, 0)
        + std::cmp::min(c_sb, c_ea)
        + if r_sbea && r_sb { 1 } else { 0 }
        + if r_sbea && r_ea { 1 } else { 0 };
    println!("{}", ans);
}