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 C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <string.h>

int main()
{
    int N;

    scanf("%d", &N);

    char words[10010][12] = {""};

    for (int i = 0; i < N; i++) {
        scanf("%s", words[i]);
    }

    int ans_count = 0;
    int cnt_A = 0;
    int cnt_B = 0;
    int cnt_AB = 0;
    int str_len = 0;

    for (int i = 0; i < N; i++)
    {
        if (strstr(words[i], "AB") != NULL)
        {
            ans_count++;
        }

        str_len = strlen(words[i]);

        if (words[i][str_len - 1] == 'A')
        {
            cnt_A++;
        }

        if (words[i][0] == 'B')
        {
            cnt_B++;
        }

        if ((words[i][0] == 'B') && (words[i][str_len - 1] == 'A'))
        {
            cnt_AB++;
        }

    }
    int AB_cnt = 0;
    if ( cnt_A >= cnt_B) {
        AB_cnt = cnt_B;
    } else {
        AB_cnt = cnt_A;
    }

    // printf("%d%d\n", cnt_A, cnt_B);
    // printf("%d %d", AB_cnt, cnt_AB);

    // for (int i = 0; i < N; i++)
    // {
    //     printf("%s", words[i]);
    // }

    printf("%d", ans_count+AB_cnt - cnt_AB);
    return 0;
}