Problem:
Score : 600 points

Problem Statement

Takahashi has N balls with positive integers written on them. The integer written on the i-th ball is A_i.
He would like to form some number of pairs such that the sum of the integers written on each pair of balls is a power of 2.
Note that a ball cannot belong to multiple pairs.
Find the maximum possible number of pairs that can be formed.

Here, a positive integer is said to be a power of 2 when it can be written as 2^t using some non-negative integer t.

Constraints

1 \leq N \leq 2\times 10^5

1 \leq A_i \leq 10^9

A_i is an integer.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible number of pairs such that the sum of the integers written on each pair of balls is a power of 2.

Sample Input 1

3
1 2 3

Sample Output 1

1

We can form one pair whose sum of the written numbers is 4 by pairing the first and third balls.
Note that we cannot pair the second ball with itself.

Sample Input 2

5
3 11 14 5 13

Sample Output 2

2

Solution in Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

program main
implicit None
integer(8)::n,i,j,p,q,s,e,f,g
integer(8),allocatable::a(:)
real(8)::k,x,y

	read *,n
	allocate(a(n))
	read *,a
	call h2(a,n)
	
	s = 0
	do i = n,1,-1
		if (a(i) >1000000000)then
			cycle
		endif
		x = real(a(i));y = 2
		q = 2**(int(log(x)/log(y)+1))
		
		p = q-a(i)
		
		e = 1
		f = i-1
		
		do while (f-e >1)
			g = (e + f)/2
				print *,g
			if(a(g) > p)then
				f = g
				else
					e = g
			endif
			print *,a(i),p,e,f
		enddo
		
		
		do j = f,e,-1
			if(a(j) == p)then
				s = s + 1
				a(j) = 1000000001
				exit
			endif
		enddo
	enddo
	
	print * ,s
101 format(i0)
end program main

subroutine h2(a,n)
implicit None
	integer(8)::a(n),x
	integer(8)::n,i,ie,i0,i1,i2
	
	do i = n/2,1,-1
		x = a(i);ie = n + 1; i0 = i; i1 = i0 * 2
		do while(i1 < ie)
			i2 = i1 + 1
			if(i2 < ie .and. a(i1) < a(i2)) i1 = i2
			if(a(i1) > x)then
				a(i0) = a(i1);a(i1) = x
				else
				exit
			endif
			i0 = i1;i1 = i0 *2
		enddo
	enddo
	do ie = n,2,-1
		x = a(ie)
		a(ie) = a(1)
		a(1) = x
		i0 =1;i1 =2
		do while(i1 <ie)
			i2 = i1 +1
			if(i2 < ie .and. a(i1) < a(i2)) i1 = i2
			if(a(i1) > x)then
				a(i0) = a(i1);a(i1) = x
				else
				exit
			endif
			i0 = i1;i1 = i0 *2
		enddo
	enddo
end subroutine h2