unittest
{
	assert( [ "3", "ABCA", "XBAZ", "BAD" ].parse.expand.solve == 2 );
	assert( [ "9", "BEWPVCRWH", "ZZNQYIJX", "BAVREA", "PA", "HJMYITEOX", "BCJHMRMNK", "BP", "QVFABZ", "PRGKSPUNA" ].parse.expand.solve == 4 );
	assert( [ "7", "RABYBBE", "JOZ", "BMHQUVA", "BPA", "ISU", "MCMABAOBHZ", "SZMEHMA" ].parse.expand.solve == 4 );
}



import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	auto ss = new dchar[][ n ];
	foreach( ref s; ss )
	{
		input.popFront;
		s = input.front.to!( dchar[] );
	}
	return tuple( ss );
}

auto solve( dchar[][] ss )
{
	// 1単語に含まれるABの数をカウント、単語の先頭文字と末尾文字で分類
	auto ans = 0L;
	auto bxa = 0L;
	auto xa = 0L;
	auto bx = 0L;
	foreach( s; ss )
	{
		ans += s.count( "AB" );
		if(      s[ $ - 1 ] == 'A' && s[ 0 ] == 'B' ) bxa++;
		else if( s[ $ - 1 ] == 'A'                  ) xa++;
		else if( s[ 0     ] == 'B'                  ) bx++;
	}
	
	if( 0 < bxa )
	{
		// 先頭文字がBで末尾文字がAの単語を全部連結
		ans += bxa - 1;
		
		// 更に先頭に末尾文字がAの単語を連結
		if( 0 < xa )
		{
			xa--;
			ans++;
		}
		
		// 更に末尾に先頭文字がBの単語を連結
		if( 0 < bx )
		{
			bx--;
			ans++;
		}
	}
	
	// 末尾文字がAの単語と先頭文字がBの単語を連結
	ans += min( xa, bx );
	
	return ans;
}
