program main
	implicit none
	integer :: N
	integer, allocatable :: A(:)
	integer :: i, ans
	
	read(*, *) N
	allocate(A(1:N+1))
	read(*, *) A(1:N)
	A(N+1) = 1000000
	ans = 1

	call heapsort(N+1,A)
	if(mod(N,2) == 0) then
		do i = 1, N/2
			if(A(2*(i-1)+1) /= A(2*i) .OR. A(2*(i-1)+1) /= 2*i-1) then
				write(*, *) 0
				goto 10
			end if
		end do
		do i = 1, N/2
			ans = mod(ans,1000000007)*2
		end do
		write(*, *) ans
	else
		if(A(1) /= 0) then
			write(*, *) 0
			goto 10
		end if
		do i = 1, (N-1)/2
			if(A(2*i) /= A(2*i+1) .OR. A(2*i) /= 2*i) then
				write(*, *) 0
				goto 10
			end if
		end do
		do i = 1, N/2
			ans = mod(ans,1000000007)*2
		end do
		write(*, *) ans	
	end if
	

	10 continue
	
	contains
	subroutine heapsort(n,array)
		implicit none
		integer,intent(in) :: n
		integer,intent(inout) :: array(1:n)
  
		integer ::i,k,j,l
		double precision :: t
  
		if(n.le.0)then
			write(6,*)"Error, at heapsort"; stop
		endif
		if(n.eq.1)return

		l=n/2+1
		k=n
		do while(k.ne.1)
			if(l.gt.1)then
				l=l-1
				t=array(L)
			else
				t=array(k)
				array(k)=array(1)
				k=k-1
				if(k.eq.1) then
					array(1)=t
					exit
				endif
			endif
			i=l
			j=l+l
			do while(j.le.k)
				if(j.lt.k)then
					if(array(j).lt.array(j+1))j=j+1
				endif
				if (t.lt.array(j))then
					array(i)=array(j)
					i=j
					j=j+j
				else
					j=k+1
				endif
			enddo
			array(i)=t
		enddo

		return
	end subroutine heapsort
end program main