import Control.Monad
import qualified Data.ByteString.Char8 as BS
import Data.Maybe (fromJust)
import Data.List

modNum :: Integer
modNum = 10^9 + 7

canSolve :: [Integer] -> Bool
canSolve arr
    | isOdd = canSolveOdd sorted 0
    | otherwise = canSolveEven sorted 0
    where
        isOdd = ((length arr) `mod` 2) > 0
        sorted = sort arr

canSolveOdd :: [Integer] -> Integer -> Bool
canSolveOdd [] _ = True
canSolveOdd (x:xs) idx
    | x == target = canSolveOdd xs (idx + 1)
    | otherwise = False
    where
        target = ((idx + 1) `div` 2) * 2


canSolveEven :: [Integer] -> Integer -> Bool
canSolveEven [] _ = True
canSolveEven (x:xs) idx
    | x == target = canSolveEven xs (idx + 1)
    | otherwise = False
    where
        target = (idx `div` 2) * 2 + 1

modPow :: Integer -> Integer -> Integer
modPow _ 0 = 1
modPow x y = (x * (modPow x (y - 1))) `mod` modNum

solve:: [Integer] -> Integer
solve arr
    | (canSolve arr) = modPow 2 (fromIntegral ((length arr) `div` 2))
    | otherwise = 0

main :: IO ()
main = do
    _ <- BS.getLine
    a <- map (fst . fromJust . BS.readInteger) . BS.words <$> BS.getLine
    print $ solve a
