unittest
{
	assert( [ "5", "7.5", "2.4", "17.000000001", "17", "16.000000000" ].solve == 3 );
	assert( [ "11", "0.9", "1", "1", "1.25", "2.30000", "5", "70", "0.000000001", "9999.999999999", "0.999999999", "1.000000001" ].solve == 8 );
}



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

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

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.to!( long );
	auto as = new long[ n ];
	foreach( ref a; as )
	{
		input.popFront;
		auto b = input.front.split( "." );
		a = b[ 0 ].to!( long ) * 10L ^^ 9;		// 全体に10^^9の補正を掛けて整数にする
		if( 1 < b.length ) a += b[ 1 ].to!( long ) * 10L ^^ ( 9 - b[ 1 ].length.signed );
	}
	
	// 素因数2と5が含まれる数ごとに分類
	const M = 18;
	auto dss = new long[][]( 1 + M, 1 + M );
	foreach( a; as )
	{
		auto d2 = 0L;
		auto d5 = 0L;
		for( ; d2 < M && a % 2 == 0; a /= 2 ) d2++;
		for( ; d5 < M && a % 5 == 0; a /= 5 ) d5++;
		dss[ d2 ][ d5 ]++;
	}
	
	// 素因数2と5がそれぞれ18個以上になる（10^^9の補正を打ち消した状態で整数になる）ペアをカウント
	auto ans = 0L;
	foreach( a2; 0L .. M + 1 )
	{
		foreach( a5; 0L .. M + 1 )
		{
			if( dss[ a2 ][ a5 ] == 0 ) continue;
			foreach( b2; M - a2 .. M + 1 )
			{
				foreach( b5; M - a5 .. M + 1 )
				{
					if( dss[ b2 ][ b5 ] == 0 ) continue;
					ans += dss[ a2 ][ a5 ] * ( dss[ b2 ][ b5 ] - ( a2 == b2 && a5 == b5 ) );
				}
			}
		}
	}
	ans /= 2;
	return ans;
}
