# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c



import sys

sys.setrecursionlimit(1 << 25)

read = sys.stdin.readline

ra = range

enu = enumerate





MOD = 10**9 + 7

INF = 2**31  # 2147483648 > 10**9

# default import

from collections import defaultdict, Counter, deque

from operator import itemgetter

from itertools import product, permutations, combinations

from bisect import bisect_left, bisect_right  # , insort_left, insort_right



# greedyっぽいなぁ

# ABとなる部分を最大化したい

# *B → A*はむだ、*A→B*となる文字列はそのように連結させたほうがよい

# つまり新たにAB文字列になるのはmin(*Aの数,B*の数)

# ただしB*Aを満たす文字列に関してはどちらにもなりうるので、好きにpaddingできる



N = int(eval(input()))

cnt = end_A = start_B = both = 0

for _ in ra(N):

    s = eval(input())

    cnt += s.count('AB')



    if s.endswith('A') and s.startswith('B'):

        both += 1

    elif s.endswith('A'):

        end_A += 1

    elif s.startswith('B'):

        start_B += 1





# 処理の順番も大事

# bothから考えると、bothは基本的にboth−1個のABをつくり,B*Aの文字列に化ける

# つぎにend_Aやstart_Bについて考える。これらによってmin(end_A,start_B)個できる。しかし、B*Aが存在する場合はこれを途中に挟まなければ最大値にならない。

# つまり以下のように処理すれば良い。

# both=0の場合→min(end_A,start_B)

# both>0の場合→ end_A=endB=0→both-1, end_A or endB=0→both, それ以外→both+min(end_A,start_B)

# ∵まずmin(end_A,start_B)個の組をつくりそのうちの一つをばらしてB*Aを挿入するのが最適、min()-1(ばらした分)+2(増える分)+both-1(B*Aの中の'AB'の数)だから





add = min(start_B, end_A)

if both > 0:

    if end_A == 0 and start_B == 0:

        add += both - 1

    else:

        add += both



# print(cnt, add)

print((cnt + add))

import sys

sys.setrecursionlimit(1 << 25)

read = sys.stdin.readline

ra = range

enu = enumerate





def mina(*argv, sub=1): return list([x - sub for x in argv])

# 受け渡されたすべての要素からsubだけ引く.リストを*をつけて展開しておくこと





def read_a_int(): return int(read())





def read_ints(): return list(map(int, read().split()))





def read_col(H):

    '''H is number of rows

    A列、B列が与えられるようなとき

    ex1)A,B=read_col(H)    ex2) A,=read_col(H) #一列の場合'''

    ret = []

    for _ in range(H):

        ret.append(list(map(int, read().split())))

    return tuple(map(list, list(zip(*ret))))





def read_tuple(H):

    '''H is number of rows'''

    ret = []

    for _ in range(H):

        ret.append(tuple(map(int, read().split())))

    return ret





def read_matrix(H):

    '''H is number of rows'''

    ret = []

    for _ in range(H):

        ret.append(list(map(int, read().split())))

    return ret

    # return [list(map(int, read().split())) for _ in range(H)] # 内包表記はpypyでは遅いため





MOD = 10**9 + 7

INF = 2**31  # 2147483648 > 10**9

# default import

from collections import defaultdict, Counter, deque

from operator import itemgetter

from itertools import product, permutations, combinations

from bisect import bisect_left, bisect_right  # , insort_left, insort_right



# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c



# B*A,*A,B*,*の4つに分類される。

# *に関しては事前に全部カウントしておけば良い

# B*A同士で作ったほうが有利(個数-1増える)

# *A,B*は 少ない方の個数増える

# 後者2つはコーナーケースに注意(つまり、B*Aがデータセットにある場合はさらに+1できる)(消化しきれない場合)



N = int(eval(input()))

base = 0

b_ = 0

_a = 0

b_a = 0

for _ in range(N):

    s = read()[:-1]

    if s.startswith('B') and s.endswith('A'):

        b_a += 1

    elif s.startswith('B'):

        b_ += 1

    elif s.endswith('A'):

        _a += 1

    base += s.count('AB')



ans = base

if b_a:

    ans += b_a - 1



if b_ and b_a:

    ans += 1

    b_ -= 1  # b_aの端に結合



if _a and b_a:

    ans += 1

    _a -= 1  # b_aの端に結合



ans += min(b_, _a)

print(ans)





# print(base + b_a + min(b_, _a) + (-1 if b_ == _a and b_a > 0 else 0))

# バグってる

# ちゃんとやるか

# print(base, b_a, b_, _a)

# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c
import sys

sys.setrecursionlimit(1 << 25)
read = sys.stdin.readline
ra = range
enu = enumerate
MOD = 10**9 + 7
INF = 2**31  # 2147483648 > 10**9
# default import
from collections import defaultdict, Counter, deque
from operator import itemgetter
from itertools import product, permutations, combinations
from bisect import bisect_left, bisect_right  # , insort_left, insort_right

# greedyっぽいなぁ
# ABとなる部分を最大化したい
# *B → A*はむだ、*A→B*となる文字列はそのように連結させたほうがよい
# つまり新たにAB文字列になるのはmin(*Aの数,B*の数)
# ただしB*Aを満たす文字列に関してはどちらにもなりうるので、好きにpaddingできる
N = int(eval(input()))
cnt = end_A = start_B = both = 0
for _ in ra(N):
    s = eval(input())
    cnt += s.count("AB")
    if s.endswith("A") and s.startswith("B"):
        both += 1
    elif s.endswith("A"):
        end_A += 1
    elif s.startswith("B"):
        start_B += 1
# 処理の順番も大事
# bothから考えると、bothは基本的にboth−1個のABをつくり,B*Aの文字列に化ける
# つぎにend_Aやstart_Bについて考える。これらによってmin(end_A,start_B)個できる。しかし、B*Aが存在する場合はこれを途中に挟まなければ最大値にならない。
# つまり以下のように処理すれば良い。
# both=0の場合→min(end_A,start_B)
# both>0の場合→ end_A=endB=0→both-1, end_A or endB=0→both, それ以外→both+min(end_A,start_B)
# ∵まずmin(end_A,start_B)個の組をつくりそのうちの一つをばらしてB*Aを挿入するのが最適、min()-1(ばらした分)+2(増える分)+both-1(B*Aの中の'AB'の数)だから
add = min(start_B, end_A)
if both > 0:
    if end_A == 0 and start_B == 0:
        add += both - 1
    else:
        add += both
# print(cnt, add)
print((cnt + add))

import sys

sys.setrecursionlimit(1 << 25)
read = sys.stdin.readline
ra = range
enu = enumerate


def mina(*argv, sub=1):
    return list([x - sub for x in argv])


# 受け渡されたすべての要素からsubだけ引く.リストを*をつけて展開しておくこと
def read_a_int():
    return int(read())


def read_ints():
    return list(map(int, read().split()))


def read_col(H):
    """H is number of rows
    A列、B列が与えられるようなとき
    ex1)A,B=read_col(H)    ex2) A,=read_col(H) #一列の場合"""
    ret = []
    for _ in range(H):
        ret.append(list(map(int, read().split())))
    return tuple(map(list, list(zip(*ret))))


def read_tuple(H):
    """H is number of rows"""
    ret = []
    for _ in range(H):
        ret.append(tuple(map(int, read().split())))
    return ret


def read_matrix(H):
    """H is number of rows"""
    ret = []
    for _ in range(H):
        ret.append(list(map(int, read().split())))
    return ret
    # return [list(map(int, read().split())) for _ in range(H)] # 内包表記はpypyでは遅いため


MOD = 10**9 + 7
INF = 2**31  # 2147483648 > 10**9
# default import
from collections import defaultdict, Counter, deque
from operator import itemgetter
from itertools import product, permutations, combinations
from bisect import bisect_left, bisect_right  # , insort_left, insort_right

# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c
# B*A,*A,B*,*の4つに分類される。
# *に関しては事前に全部カウントしておけば良い
# B*A同士で作ったほうが有利(個数-1増える)
# *A,B*は 少ない方の個数増える
# 後者2つはコーナーケースに注意(つまり、B*Aがデータセットにある場合はさらに+1できる)(消化しきれない場合)
N = int(eval(input()))
base = 0
b_ = 0
_a = 0
b_a = 0
for _ in range(N):
    s = read()[:-1]
    if s.startswith("B") and s.endswith("A"):
        b_a += 1
    elif s.startswith("B"):
        b_ += 1
    elif s.endswith("A"):
        _a += 1
    base += s.count("AB")
ans = base
if b_a:
    ans += b_a - 1
if b_ and b_a:
    ans += 1
    b_ -= 1  # b_aの端に結合
if _a and b_a:
    ans += 1
    _a -= 1  # b_aの端に結合
ans += min(b_, _a)
print(ans)
# print(base + b_a + min(b_, _a) + (-1 if b_ == _a and b_a > 0 else 0))
# バグってる
# ちゃんとやるか
# print(base, b_a, b_, _a)

-# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c + + +def mina(*argv, sub=1): +    return list([x - sub for x in argv]) + + +# 受け渡されたすべての要素からsubだけ引く.リストを*をつけて展開しておくこと +def read_a_int(): +    return int(read()) + + +def read_ints(): +    return list(map(int, read().split())) + + +def read_col(H): +    """H is number of rows +    A列、B列が与えられるようなとき +    ex1)A,B=read_col(H)    ex2) A,=read_col(H) #一列の場合""" +    ret = [] +    for _ in range(H): +        ret.append(list(map(int, read().split()))) +    return tuple(map(list, list(zip(*ret)))) + + +def read_tuple(H): +    """H is number of rows""" +    ret = [] +    for _ in range(H): +        ret.append(tuple(map(int, read().split()))) +    return ret + + +def read_matrix(H): +    """H is number of rows""" +    ret = [] +    for _ in range(H): +        ret.append(list(map(int, read().split()))) +    return ret +    # return [list(map(int, read().split())) for _ in range(H)] # 内包表記はpypyでは遅いため + + -# greedyっぽいなぁ -# ABとなる部分を最大化したい -# *B → A*はむだ、*A→B*となる文字列はそのように連結させたほうがよい -# つまり新たにAB文字列になるのはmin(*Aの数,B*の数) -# ただしB*Aを満たす文字列に関してはどちらにもなりうるので、好きにpaddingできる +# https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c +# B*A,*A,B*,*の4つに分類される。 +# *に関しては事前に全部カウントしておけば良い +# B*A同士で作ったほうが有利(個数-1増える) +# *A,B*は 少ない方の個数増える +# 後者2つはコーナーケースに注意(つまり、B*Aがデータセットにある場合はさらに+1できる)(消化しきれない場合) -cnt = end_A = start_B = both = 0 -for _ in ra(N): -    s = eval(input()) -    cnt += s.count("AB") -    if s.endswith("A") and s.startswith("B"): -        both += 1 +base = 0 +b_ = 0 +_a = 0 +b_a = 0 +for _ in range(N): +    s = read()[:-1] +    if s.startswith("B") and s.endswith("A"): +        b_a += 1 +    elif s.startswith("B"): +        b_ += 1 -        end_A += 1 -    elif s.startswith("B"): -        start_B += 1 -# 処理の順番も大事 -# bothから考えると、bothは基本的にboth−1個のABをつくり,B*Aの文字列に化ける -# つぎにend_Aやstart_Bについて考える。これらによってmin(end_A,start_B)個できる。しかし、B*Aが存在する場合はこれを途中に挟まなければ最大値にならない。 -# つまり以下のように処理すれば良い。 -# both=0の場合→min(end_A,start_B) -# both>0の場合→ end_A=endB=0→both-1, end_A or endB=0→both, それ以外→both+min(end_A,start_B) -# ∵まずmin(end_A,start_B)個の組をつくりそのうちの一つをばらしてB*Aを挿入するのが最適、min()-1(ばらした分)+2(増える分)+both-1(B*Aの中の'AB'の数)だから -add = min(start_B, end_A) -if both > 0: -    if end_A == 0 and start_B == 0: -        add += both - 1 -    else: -        add += both -# print(cnt, add) -print((cnt + add)) +        _a += 1 +    base += s.count("AB") +ans = base +if b_a: +    ans += b_a - 1 +if b_ and b_a: +    ans += 1 +    b_ -= 1  # b_aの端に結合 +if _a and b_a: +    ans += 1 +    _a -= 1  # b_aの端に結合 +ans += min(b_, _a) +print(ans) +# print(base + b_a + min(b_, _a) + (-1 if b_ == _a and b_a > 0 else 0)) +# バグってる +# ちゃんとやるか +# print(base, b_a, b_, _a)