import Control.Applicative
import Data.List

m = 998244353
modm n = mod n m

mul' x y = modm $ modm x * modm y

power' x 0 = 1
power' x 1 = modm x
power' x n
  | (n `mod` 2) == 0 = let i = power' x (n `div` 2) in mul' i i
  | otherwise = mul' x $ power' x (n - 1)

div' x y = mul' x $ power' y (m - 2)

product' xs = foldl mul' 1 xs

factorial' n = product' [1..n]

npr' n r = product' [n - i | i <- [0..(r - 1)]]

ncr' n r = modm $ (npr' n r) `div'` (factorial' r)

main = do
  [n] <- map read <$> words <$> getLine :: IO [Int]
  xs <- map read <$> words <$> getLine :: IO [Int]
  --let n = 7
  --let xs = [0,3,2,1,2,2,1]
  let xs' = group $ sort xs
  let ls = map length xs'
  if (head xs /= 0) || ((length.head) xs' /= 1) then
    print 0
  else if and (zipWith (==) (sort $ nub xs) [0..]) then
    print $ foldl1' mul' $ zipWith power' (init ls) (tail ls)
  else
    print 0

