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: Wrong Answer)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

	public static void main(String[] args) {
		try (BufferedReader BF = new BufferedReader(new InputStreamReader(System.in))) {
			String[] input = BF.readLine().split("\\s");

			double N = Long.parseLong(input[0]);
			
			if(N < 1) N = 1;
			if(N > Math.pow(10, 4)) N = Math.pow(10, 4);
			
			String[] SJ = new String[(int) N];
			
			for(int x = 1; x<=N; x++) {
				SJ[x-1] = (input.length > x ? input[x].toUpperCase() : BF.readLine().toUpperCase());
				if(SJ[x-1].length() > 10)
					SJ[x-1] = SJ[x-1].substring(0, 10);
			}
			
			String SJ_AB = (String) Arrays.asList(SJ).stream().filter(val -> {
				return ((String) val).contains("AB");
			})
					.collect(Collectors.joining(""));
			
			List<String> SJ_A = Arrays.asList(SJ).stream()
					.map(v -> ((String) v).replaceAll("AB", ""))
					.filter(val -> {
				return ((String) val).startsWith("A") || ((String) val).endsWith("A");
			}).collect(Collectors.toList());
			
			List<String> SJ_B = Arrays.asList(SJ).stream()
					.map(v -> ((String) v).replaceAll("AB", ""))
					.filter(val -> {
				return ((String) val).startsWith("B") || ((String) val).endsWith("B");
			}).collect(Collectors.toList());
			
			int total = (int) (SJ_AB.split("AB", -1).length-1);
			
			if(SJ_A.size() > 0 && SJ_B.size() > 0) {
				total += Math.min(SJ_A.size(), SJ_B.size());
			}
			
			System.out.println(total);
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}