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

import java.util.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String[] s = new String[N];
		int init_B=0;
		int last_A=0;
		int both_BA=0;
		int mid_AB=0;

		for (int i=0;i<N;i++) {
			s[i]=sc.next();
			int n=s[i].length();
			if (s[i].charAt(0)=='B') {
				init_B++;
			}
			if (s[i].charAt(n-1)=='A') {
				last_A++;
			}
			if (s[i].charAt(0)=='B' && s[i].charAt(n-1)=='A') {
				both_BA++;
			}

			for (int j=0;j<n-1;j++) {
				if (s[i].charAt(j)=='A' && s[i].charAt(j+1)=='B') {
					mid_AB++;
				}
			}
		}

		if (init_B==last_A && last_A==both_BA && both_BA>0) {
			init_B--;
		}
		System.out.println(Math.min(init_B,last_A)+mid_AB);
	}
}