Problem:
Score : 300 points

Problem Statement

You are given N real values A_1, A_2, \ldots, A_N.
Compute the number of pairs of indices (i, j)
such that i < j and the product A_i \cdot A_j is integer.

Constraints

2 \leq N \leq 200\,000

0 < A_i < 10^4

A_i is given with at most 9 digits after the decimal.

Input

Input is given from Standard Input in the following format.

N
A_1
A_2
\vdots
A_N

Output

Print the number of pairs with integer product A_i \cdot A_j (and i < j).

Sample Input 1

5
7.5
2.4
17.000000001
17
16.000000000

Sample Output 1

3

There are 3 pairs with integer product:

7.5 \cdot 2.4 = 18

7.5 \cdot 16 = 120

17 \cdot 16 = 272

Sample Input 2

11
0.9
1
1
1.25
2.30000
5
70
0.000000001
9999.999999999
0.999999999
1.000000001

Sample Output 2

8

Solution in Ruby (2.7.1) (judge verdict: Runtime Error)

require "prime"

fline = readlines
len = fline.length
i = 0
delcounter = 0


while i < len
  fline[i] = fline[i].chomp
  if i == 0
  fline[i] = fline[i].to_i
  else
    fline[i] = fline[i].to_f * 1000000000
    if fline[i] == 1.0
      del = i
      delcounter += 1 
    else
      fline[i] = fline[i].to_i.prime_division
    end
  end
  i += 1
end

if delcounter > 0
  fline.delete_at(del)
end

n = 1
counter = 0

while n < fline[0] - delcounter
  m = 1
  while n + m <= fline[0] - delcounter
  
    if fline[n][0][0] == 2 && fline[n + m][0][0] == 2
      two = fline[n][0][1] + fline[n + m][0][1]
    elsif fline[n][0][0] == 2 && not(fline[n + m][0][0] == 2)
      two = fline[n][0][1]
    elsif not(fline[n][0][0] == 2) && fline[n + m][0][0] == 2
      two = fline[n + m][0][1]
    else
      two = 0
    end
  
    if fline[n][1][0] == 5 && fline[n + m][1][0] == 5
      five = fline[n][1][1] + fline[n + m][1][1]
    elsif fline[n][1][0] == 5 && not(fline[n + m][1][0] == 5)
      if fline[n + m][2][0] == 5
        five = fline[n][1][1] + fline[n + m][2][1]
      else
        five = fline[n][1][1]
      end
    elsif not(fline[n][1][0] == 5) && fline[n + m][1][0] == 5
      if fline[n][2][0] == 5
        five = fline[n][2][1] + fline[n + m][1][1]
      else
        five = fline[n][1][1]
      end
    elsif not(fline[n][1][0] == 5) && not(fline[n + m][1][0] == 5)
      if fline[n][2][0] == 5 && fline[n + m][2][0] == 5
        five = fline[n][2][1] + fline[n + m][2][1]
      elsif fline[n][2][0] == 5 && not(fline[n + m][2][0])
        five = fline[n][2][1]
      elsif not(fline[n][2][0]) && fline[n + m][2][0] == 5
        five = fline[n + m][2][1]
      else
        five = 0
      end
    end
    
    if five >= 18 && two >= 18
      counter += 1
    end
    
    m += 1
  end
  n += 1
end

p counter