There are N people, conveniently numbered 1 through N.
They were standing in a row yesterday, but now they are unsure of the order in which they were standing.
However, each person remembered the following fact: the absolute difference of the number of the people who were standing to the left of that person, and the number of the people who were standing to the right of that person.
According to their reports, the difference above for person i is A_i.
Based on these reports, find the number of the possible orders in which they were standing.
Since it can be extremely large, print the answer modulo 10^9+7.
Note that the reports may be incorrect and thus there may be no consistent order.
In such a case, print 0.

-----Constraints-----
 - 1≦N≦10^5
 - 0≦A_i≦N-1

-----Input-----
The input is given from Standard Input in the following format:
N
A_1 A_2 ... A_N

-----Output-----
Print the number of the possible orders in which they were standing, modulo 10^9+7.

-----Sample Input-----
5
2 4 4 0 2

-----Sample Output-----
4

There are four possible orders, as follows:
 - 2,1,4,5,3
 - 2,5,4,1,3
 - 3,1,4,5,2
 - 3,5,4,1,2

Difficulty: introductory

Starter code:

Solutions:
n = int(input())
a = [int(x) for x in input().split()]
a.sort()
mod = 10 ** 9 + 7

def p(p):
  ans = 1
  for i in range(p):
    ans *= 2
    ans %= mod
  return ans

if n % 2 == 1:
  res = True
  for i in range(n):
    if a[i] != ((i + 1) // 2) * 2:
      res = False
  if res:
    print(p(n // 2))
  else:
    print(0)
    
else:
  res = True
  for i in range(n):
    if a[i] != (i // 2) * 2 + 1:
      res = False
  if res:
    print(p(n // 2))
  else:
    print(0)

N=int(input())
*A,=sorted(map(int,input().split()))

def f(x):
 for i in range(x,N,2):
  if A[i-1]!=i or A[i]!=i:
    return 0
 return 1   
    
a=1
if N%2==0:a=f(1)
else:
 if A[0]!=0:a=0
 else:a=f(2)
print(2**(N//2)%(10**9+7)*a)

import math

N = 5
ARR = [2, 4, 4, 0, 2]

N = 7
ARR = [6, 4, 0, 2, 4, 0, 2]
#
# N = 8
# ARR = [7, 5, 1, 1, 7, 3, 5, 3]
#
N = int(input())
ARR = list(map(int, input().split()))


def calculate(n, arr):
    if n % 2 == 0:
        n = n // 2
        start = 1
        finalResult = pow(2, n, 1000000000 + 7)
    else:
        n = n // 2 + 1
        start = 0
        finalResult = pow(2, (n - 1), 1000000000 + 7)

    result = {}
    for i in range(n):
        index = start + 2 * i
        if index == 0:
            result.__setitem__(0, 1)
        else:
            result.__setitem__(index, 2)

    isOk = True
    for i in range(len(arr)):
        if result.get(arr[i]) == None:
            isOk = False
            break

        if result.get(arr[i]) == 0:
            isOk = False
            break

        result.__setitem__(arr[i], result.get(arr[i])-1)

    if isOk == False:
        print((0))
        return

    if sum(result.values()) == 0:
        print(finalResult)
    else:
        print((0))


calculate(N, ARR)


n = int(input())
a = list(map(int, input().split()))
a.sort()
res = True
if n % 2 != 0:
  if a[0] != 0:
    res = False
    print(0)
  a = a[1:]
for i in range(0, len(a), 2):
  if a[i] != a[i+1]:
    print(0)
    res = False
    break

p = 10**9 + 7
if res:
  print(pow(2, n//2, p))

n = int(input())
a = sorted(list(map(int, input().split())))
ans = 1

if n%2 == 0:
    for i in range(0, n, 2):
        if a[i] != i + 1 or a[i + 1] != i + 1:
            print(0)
            return
else:
    if a[0] != 0:
        print(0)
        return
    for i in range(1, n, 2):
        if a[i] != i + 1 or a[i + 1] != i + 1:
            print(0)
            return

for i in range(n//2):
    ans = ans*2%(10**9 + 7)

print(ans)

n = int(input())
a = sorted(list(map(int, input().split())))

if n%2 == 0: # 人数が偶数の場合に不整合があるか確認
  for i in range(0,n,2):
    if a[i] != i+1 or a[i+1] != i+1:
      print(0)
      return
else: # 人数が奇数の場合に不整合があるか確認
  if a[0] != 0: # 差分が0存在していることを確認
    print(0)
    return
  else:
    for i in range(1,n,2):
      if a[i] != i + 1 or a[i+1] != i + 1:
        print(0)
        return
        
ans = 1        
for i in range(n//2):
  ans = ans*2%(10**9+7)
print(ans)

n = int(input())
a = sorted(list(map(int, input().split())))
if n % 2 == 0:
    b,s = [1,1],3
else:
    b,s = [0],2
for i in range(s,n,2):
    b += [i,i]
if a == b:
    print(pow(2,n//2,1000000007))
else:
    print(0)

N = int(input())
N_List = sorted(list(map(int,input().split())))
flg = 0
ans = 1
if N % 2 == 1:
    if N_List[0] != 0:
        flg = 1
    else:
        for i in range(2,N,2):
            if i*2 != sum(N_List[i-1:i+1]):
                flg = 1
                break
            else:
                ans = (ans * 2) % ((10**9) +7)
        

else:
    for i in range(1,N,2):
        if i*2 != sum(N_List[i-1:i+1]):
            flg = 1
            break
        else:
            ans = (ans * 2) % ((10**9) +7)

if flg == 0:
    print(ans)
else:
    print((0))

                


N = int(input())
A = [int(x) for x in input().split()]

cnt = {}
if N & 1:
    bit = 1
else:
    bit = 0

for a in A:
    if a & bit:
        ans = 0
        break
    if a in cnt:
        cnt[a] += 1
    else:
        cnt[a] = 1

for key in list(cnt.keys()):
    if key == 0 and cnt[key] != 1:
        ans = 0
        break
    if key != 0 and cnt[key] != 2:
        ans = 0
        break
else:
    ans = 2**(N//2) %1000000007
print(ans)


n=int(input())
from collections import Counter as co
c=co(map(int,input().split()))
ans=pow(2,n//2,10**9+7)
if n%2 :
    if 0 not in c or c[0]>1:ans=0
    for i in range(1,n):
        if i%2==0 :
            if i not in c or c[i]!=2:ans=0;break
        else:
            if i in c:ans=0;break
else:
    if 0 in c:ans=0
    for  i in range(1,n):
        if i%2:
            if i not in c or c[i]!=2:ans=0;break
        else:
            if i in c:ans=0;break
print(ans)

n = int(input())
a = list(map(int, input().split()))
l = [0] * n
for x in a:
    l[x] += 1
for i in range(n):
    if l[i] > 2:
        print(0)
        return
    if l[i] > 0 and (i + n) % 2 == 0: 
        print(0)
        return
if n % 2 == 1 and l[0] > 1:
    print(0)
    return
print(pow(2, n // 2, 10 ** 9 + 7))

n = int(input())
a_list = sorted([int(x) for x in input().split()], reverse=True)
m = n
if m % 2 == 1:
    a_list.append(0)
    m += 1
for i in range(0, m, 2):
    if not (a_list[i] == a_list[i + 1] == n - (i + 1)):
        print(0)
        return
print(2 ** (n // 2) % (10 ** 9 + 7))

n = int(input())
a = list(map(int, input().split()))
mod = 10 ** 9 + 7
num_map = [0] * ((n + 2 - 1) // 2)
for i in range(n):
    num_map[a[i] // 2] += 1

res = 2 - n % 2
if num_map[0] != 2 - n % 2:
    print((0))
else:
    for i in range(1, (n + 2 - 1) // 2):
        if num_map[i] != 2:
            print((0))
            break
        else:
            res = res * 2 % mod
    else:
        print(res)


mod = 10**9+7
n = int(input())
a = list(map(int,input().split()))
c_dic = dict()
if n%2 == 0:
  for num in a:
    if num%2 == 0 or n < num:
      print(0)
      return
    if num in c_dic:
      c_dic[num] += 1
      if c_dic[num] > 2:
        print(0)
        return
    else:
      c_dic[num] = 1
  print(pow(2,n//2,mod))
else:
  for num in a:
    if num%2 == 1 or n < num:
      print(0)
      return
    if num in c_dic:
      c_dic[num] += 1
      if c_dic[num] > 2:
        print(0)
        return
    else:
      c_dic[num] = 1
  if c_dic[0] != 1:
    print(0)
    return
  print(pow(2,n//2,mod))

import sys
from collections import Counter

n = int(input())
a = list(map(int, input().split()))
a.sort()

l = []

for i in range(n):
    li = abs(i - (n-1-i))
    l.append(li)
    
l.sort()


for ai, li in zip(l,a):
    if ai != li:
        print((0))
        return

d = Counter(l)
mod = 10 ** 9 + 7
ans = 1

for li in d:
    for j in range(1,d[li]+1):
        ans *= j
        ans %= mod

print(ans)


n=int(input())
a=[int(i) for i in input().split()]

def somosomo(a):
    ans=[]
    if n%2==1:
        ans.append(0)
        for i in range(1,n//2+1):
            ans.append(i*2)
            ans.append(i*2)
        b=sorted(a)
        if b==ans:
            return True
        return False
    else:
        for i in range(1,n//2+1):
            ans.append(i*2-1)
            ans.append(i*2-1)
        b=sorted(a)
        if b==ans:
            return True
        return False

def two_ride(n):
    ans=1
    for i in range(n):
        ans*=2
        ans%=10**9+7
    return ans

if somosomo(a):
    print(two_ride(n//2))
else:
    print(0)

n=int(input())
a=list(map(int,input().split()))
l=[0]*n
for i in range(n):
    l[a[i]]+=1
#print(l)
if n%2==1:
    if l[0]!=1:
        print(0)
        return
ans=1
for i in range(n):
    if n%2==0:
        if i%2==0:
            if l[i]!=0:
                print(0)
                return
    else:
        if i%2==1:
            if l[i]!=0:
                print(0)
                return
    
    if l[i]==2:
        ans*=2
    elif l[i]>2:
        print(0)
        return
    ans%=(10**9 +7)
print(ans)

N = int(input())
count = [0]*(N+1)
modz = 10**9 + 7

def junretsu(a):
    if a <= 0: return 1
    if (a & 0x01) == 1:
        return 2*junretsu(a-1) % modz
    else:
        rr = junretsu(a>>1)
        return rr*rr % modz

pos = list(map(int, input().split()))
for i in range(N):
    count[pos[i]] += 1

diff = [0]*(N+1)
for i in range(1, N+1):
    d = abs((N - i) - (i-1))
    diff[d] += 1

invalid = False
total = 1
for i in range(N):
    if count[i] != diff[i]:
        invalid = True
        break

if invalid:
    print((0))
else:
    print((junretsu(int(N/2))))


num = int(input())
t = [int(n) for n in input().split()]
t = sorted(t)

valid = True

if num % 2 == 1: # odd
  check = list(range(0,num+1,2))[1:]
  
  valid1 = t[0] == 0
  valid2 = check == t[2::2] # even, skip first
  valid3 = check == t[1::2] # odd
  valid = valid1 and valid2 and valid3
  
  if not valid:
    print((0))
  else:
    ans = 2**((num-1)//2) % (10**9 + 7)
    print(ans)
  
else: # even 
  check = list(range(1,num,2))
  
  valid1 = True
  valid2 = check == t[::2] # even
  valid3 = check == t[1::2] # odd
  valid = valid1 and valid2 and valid3
  
  if not valid:
    print((0))
  else:
    ans = 2**((num)//2) % (10**9 + 7)
    print(ans)


  


N = int(input())
A = list(map(int,input().split()))
   
A.sort()

check=[0]*N

for idx in range(N%2,N,2):
    check[idx]=idx+1
    check[idx+1]=idx+1

ans=0

if check == A:
    if N % 2 == 0:
        ans=(2**(N//2))%(10**9+7)
    elif N % 2 != 0:
        ans=(2**((N-1)//2))%(10**9+7)
    
print(ans)


n=int(input())
mod=10**9+7
A=list(map(int,input().split()))

from collections import Counter
C=Counter(A)
if n%2==0:
    for i in range(1,n,2):
        if C.get(i) != 2:
            print(0);return
else:
    if C.get(0) !=1:
        print(0);return
    for i in range(2,n,2):
        if C.get(i)!=2:
            print(0);return

n//=2
print(pow(2,n,mod))

n = int(input())
a = sorted(list(map(int, input().split())))

if len(a)%2==1:
    tmp = [0]
    for i in range((len(a)-1)//2):
        tmp.append((i+1)*2)
        tmp.append((i+1)*2)
    if a == tmp:
        ans = (2**((len(a)-1)//2))%(10**9+7)
    else:
        ans = 0
else:
    tmp = []
    for i in range(len(a)//2):
        tmp.append(2*i+1)
        tmp.append(2*i+1)
    if a == tmp:
        ans = (2**(len(a)//2))%(10**9+7)
    else:
        ans = 0
print(ans)

N = int(input())
As = list(map(int, input().split()))
# 絶対値の差は、
# 奇数の場合はN+1から2ずつ減らして行った分しかない。(N+1)/2
# 偶数の場合はNから2ずつ減らして行った分しかない。N/2
nums = {}
exists = True
if N % 2 == 0:
    for A in As:
        if A in nums:
            nums[A] += 1
        else:
            nums[A] = 1
    for key, value in list(nums.items()):
        if key == 0:
            exists = False
        if value != 2:
            exists = False

else:
    for A in As:
        if A in nums:
            nums[A] += 1
        else:
            nums[A] = 1
    for key, value in list(nums.items()):
        if key == 0:
            if value != 1:
                exists = False
        else:
            if value != 2:
                exists = False
if not exists:
    print((0))
else:
    ans = 1
    if N % 2 == 0:
        for i in range(int(N / 2)):
            ans = ans * 2
            ans %= 10**9 + 7
    else:
        for i in range(int((N - 1) / 2)):
            ans = ans * 2
            ans %= 10**9 + 7
            # 絶対値の差は0の時は1人だけ。そのほかは2人だけ。これが満たせるなら
            # (偶数)2**(N+1/2)
            # (奇数)2**(N/2)
    print(ans)


from collections import Counter


def mod_pow(a, n, mod):
    """
    二分累乗法による a^n (mod m)の実装
    :param a: 累乗の底
    :param n: 累乗の指数
    :param mod: 法
    :return: a^n (mod m)
    """

    result = 1
    a_n = a
    while n > 0:
        if n & 1:
            result = result * a_n % mod
        a_n = a_n * a_n % mod
        n >>= 1
    return result


N = int(input())
A = Counter(tuple(map(int, input().split(' '))))
MOD = 10 ** 9 + 7

if A[0] > 1:
    print((0))
elif sum([key for key, value in list(A.items()) if value == 1]) != 0:
    print((0))
else:
    print((mod_pow(2, N // 2, MOD)))


N = int(input())
A = list(map(int, input().split()))
mod = 10 ** 9 + 7

A = sorted(A)
ans = 1
if N % 2 == 0:#[1,1,3,3,5,5,...]
  for i in range(N):
    xx = int(i / 2)
    if A[i] != 2 * xx + 1:
      ans = 0
    else:
      if i % 2 == 1:
        ans *= 2
        ans %= mod
else:#[0, 2, 2, 4, 4 ...]
  for i in range(N):
    xx = int((i + 1)/2)
    if A[i] != 2 * xx:
      ans = 0
    else:
      if (i % 2 == 0) and (i != 0):
        ans *= 2
        ans %= mod
      
      
  
  
print(ans)



n = int(input())
a = list(map(int, input().split()))
a.sort()
res = True
anse = list(i for i in range(1, n, 2))
anso = list(i for i in range(2, n, 2))
if n % 2 != 0:
  if a[0] != 0:
    res = False
    print(0)
  a = a[1:]
  for i in range(0, len(a), 2):
    if a[i] != anso[i//2] or a[i+1] != anso[i//2]:
        print(0)
        res = False
        break


if n % 2 == 0:
    for i in range(0, len(a), 2):
        if a[i] != anse[i//2] or a[i+1] != anse[i//2]:
            print(0)
            res = False
            break

p = 10**9 + 7
if res:
  print(pow(2, n//2, p))

n=int(input())
l=list(map(int,input().split()))
mod=10**9+7
if n%2==0:
    d={i:2 for i in range(1,n,2)}
else:
    d={i:2 for i in range(0,n,2)}
    d[0]=1
for a in l:
    if a in d:
        d[a]-=1
    else:
        print((0))
        return
for i in list(d.values()):
    if i!=0:
        print((0))
        return
print(((2**(n//2))%mod))


from collections import Counter

n = int(input())
A = list(map(int, input().split()))
cnt_A = Counter(A)

if not all([v == 2 for k, v in cnt_A.items() if k != 0]):
    print(0)
else:
    print(pow(2, n // 2, 10**9 + 7))

N = int(input())
A = list(map(int, input().split()))

ans = 0
A_test = sorted(list(set(A)))

if N % 2 == 1:
    judge = [i for i in range(0,N,2)]
    if (A_test == judge) and (A.count(0) == 1):
        ans = 2**(N//2)
else:
    judge = [i for i in range(1,N,2)]
    if A_test == judge:
        ans = 2**(N//2)

ans = ans % (10**9 + 7)
print(ans)


import sys
from collections import Counter
N = int(input())
A = list(map(int, input().split()))
MOD = 10 ** 9 + 7

C = Counter(A)
C = sorted(C.items(), key=lambda x: x[0])
if N % 2 == 0:
    s = 1
    for k, v in C:
        if k != s or v != 2:
            print(0)
            return
        s += 2
    print(pow(2, (N // 2), MOD))
else:
    s = 0
    for k, v in C:
        if k == 0:
            if k != 0 or v != 1:
                print(0)
                return
            s += 2
            continue
        if k != s or v != 2:
            print(0)
            return
        s += 2
    print(pow(2, (N - 1) // 2, MOD))

from collections import Counter
n=int(input())
a=sorted(list(map(int,input().split())))
a_count=Counter(a)
if n%2==1:
    ans=1
    for i in a_count:
        if i%2!=0:
            print(0)
            break
        else:
            if i==0:
                if a_count[i]!=1:
                    print(0)
                    break
            
            else:
                if a_count[i]==2:
                     ans=(ans*2)%(10**9+7)
                else:
                    print(0)
                    break
    else:
      print(ans)
else:
    ans=1
    for j in a_count:
        if j%2!=1:
            print(0)
            break
        else:
            if a_count[j]==2:
                ans=(ans*2)%(10**9+7)
           
            else:
                print(0)
                break
    else:
      print(ans)

n = int(input())
a = list(map(int, input().split()))
flg = 0

a.sort()
if n % 2 == 0:
  if a[0] == 1 and a[1] == 1:
    for i in range(2, n, 2):
      if a[i] == a[i + 1] and a[i - 1] + 2 == a[i]:
        continue
      else:
        flg = 1
        break
  else:
    flg = 1
else:
  if a[0] == 0:
    for i in range(1, n, 2):
      if a[i] == a[i + 1] and a[i - 1] + 2 == a[i]:
        continue
      else:
        flg = 1
        break
  else:
    flg = 1

if flg == 1:
  print(0)
else:
  print((2 ** (n // 2)) % (10 ** 9 + 7))

n=int(input())
l=list(map(int,input().split()))
mod=10**9+7
if n%2==0:
    d={i:2 for i in range(1,n,2)}
else:
    d={i:2 for i in range(0,n,2)}
    d[0]=1
for a in l:
    if a in d:
        d[a]-=1
    else:
        print(0)
        return
for i in d.values():
    if i!=0:
        print(0)
        return
print((2**(n//2))%mod)

def main():
  N = int(input())
  A = [int(a) for a in input().split(" ")]
  A.sort()
 
  if N % 2 == 1 and A.count(0) != 1:
    print(0)
    return 0
  elif N % 2 == 0 and A.count(0) > 0:
    print(0)
    return 0
  
  if N % 2 == 1:
    A.pop(0)
  
  cnt = 0
  while len(A) > 0:
    if A[0] != A[1] or (len(A) > 2 and A[0] == A[1] and A[1] == A[2]):
      print(0)
      return 0
    elif A[0] == A[1] == 2 * cnt + (N % 2) + 1:
      cnt += 1
      A.pop(0)
      A.pop(0)
    else:
      print(0)
      return 0
 
  ans = 1
  for p in range(cnt):
    ans = (ans * 2) % 1000000007
  print(ans)

main()

n = int(input())
a = sorted(list(map(int, input().split())))

if n == 1:
  print(1)
  return
elif n%2 == 0:
  for i in range(0,n-2,2):
    if a[i] != a[i+1] or a[i] == a[i+2]:
      print(0)
      return
  if a[-2] != a[-1]:
    print(0)
    return
else:
  if a[0] != 0 or a[1] == 0:
    print(0)
    return
  for i in range(1,n-2,2):
    if a[i] != a[i+1] or a[i] == a[i+2]:
      print(0)
      return
  if a[-2] != a[-1]:
    print(0)
    return

mod = 10**9+7
if n%2 == 0: print(2**(n//2)%mod)
else: print(2**((n-1)//2)%mod)

N = int(input())
A = list(map(int, input().split()))
mod = pow(10,9)+7
A.sort()

if N%2 == 0:
    for i in range(N//2):
        if A[2*i] != A[2*i+1] or A[2*i] != 2*i+1:
            print((0))
            return
    ans = pow(2,N//2)
    print((ans%mod))
else:
    if A[0] != 0:
        print((0))
        return
    for i in range(N//2):
        if A[2*i+1] != A[2*(i+1)] or A[2*i+1] != 2*(i+1):
            print((0))
            return
    ans = pow(2,N//2)
    print((ans%mod))


N=int(input())
*A,=sorted(map(int,input().split()))
 
a=True
if N%2==0:
 for i in range(1,N,2):
  if A[i-1]!=i or A[i]!=i:
    a=False
    break
else:
 if A[0]!=0:a=False
 else:
    for i in range(2,N,2):
     if A[i-1]!=i or A[i]!=i:
        a=False
        break
print(2**(N//2)%(10**9+7) if a else 0)

from collections import Counter

N = int(input())
A = list(map(int, input().split()))
MOD = int(1e9) + 7

# 偶数の場合
if N % 2 == 0:
    c = Counter(A)
    if all(i == 2 for i in c.values()):
        print(pow(2, N//2, MOD))
    else:
        print(0)
# 奇数の場合
else:
    A.sort()
    A = A[1:]
    c = Counter(A)
    if all(i == 2 for i in c.values()):
        print(pow(2, N//2, MOD))
    else:
        print(0)

N = int(input())
a = list(map(int, input().split()))
Sum = 1
mod = 1000000007

a.sort()
data = []
if N % 2 == 0:
    for i in range(int(N / 2)):
        data.append(1 + i * 2)
        data.append(1 + i * 2)
else:
    data.append(0)
    for i in range(1, N // 2 + 1):
        data.append(i * 2)
        data.append(i * 2)

if a == data:
    for i in range(N // 2):
        Sum *= 2
        Sum %= mod
    print(Sum)
else:
    print((0))


N=int(input())
A=list(map(int,input().split()))

A.sort()
check=[0]*N

for idx in range(N%2,N,2):
    check[idx]=idx+1
    check[idx+1]=idx+1

ans=0
mod=10**9+7
if check==A:
    if N%2==0:
        ans=(2**(N//2))%mod
    else:
        ans=(2**((N-1)//2))%mod
print(ans)

n = int(input())
a = list(map(int, input().split()))

from collections import Counter
c = Counter(a)

check_ary = []
if n&1:
    check_ary.append(0)

for i in range(n//2):
    for _ in range(2):
        check_ary.append((i+1)*2 if n&1 else i*2+1)

c2 = Counter(check_ary)

if c != c2:
    print(0)
    return

print(pow(2, n//2, 10**9+7))

import sys
import heapq, math
from itertools import zip_longest, permutations, combinations, combinations_with_replacement
from itertools import accumulate, dropwhile, takewhile, groupby
from functools import lru_cache
from copy import deepcopy

N = int(input())
A = list(map(int, input().split()))

B = [0] * N

for a in A:
    B[a] += 1

ok = True

if N % 2 == 1:
    ok = ok and B[0] == 1
    for i in range(1, N):
        ok = ok and B[i] == (2 if i % 2 == 0 else 0)
else:
    for i in range(N):
        ok = ok and B[i] == (0 if i % 2 == 0 else 2)

ans = 1
MOD = int(1e9) + 7
for _ in range(N // 2):
    ans *= 2
    ans %= MOD

print((ans if ok else 0))


n=int(input())
A=list(map(int,input().split()))
A.sort()
judge=0
if n%2==1:
    for i in range(n):
        if A[i]!=2*((i+1)//2):
            judge+=1
            break
else:
    for i in range(n):
        if A[i]!=2*(i//2)+1:
            judge+=1
            break
if judge==1:
    print(0)
else:
    print((2**(n//2))%(10**9+7))

from collections import Counter
n = int(input())
a = list(map(int, input().split()))
c = Counter(a)
d = list(c.values())
if (n % 2 == 1 and c[0] == 1 and d.count(2) == (n-1)//2) or (n % 2 == 0 and d.count(2) == n//2):
    print(pow(2, n//2, 10**9+7))
else:
    print(0)

from collections import Counter
n = int(input())
a = list(map(int, input().split()))
c = Counter(a)
d = list(c.values())
if (n % 2 == 1 and c[0] == 1 and d.count(2) == (n-1)//2) or (n % 2 == 0 and d.count(2) == n//2):
    print((2**(n//2)) % (10**9+7))
else:
    print(0)

N = int(input())
K = [0 for i in range(N+1)]
A = list(map(int,input().rstrip().split(" ")))
ans = 1
for i in A:
    K[i] += 1
for i in range(N):
    if i != 0 and K[i] != 0 and K[i] != 2:
        ans = 0
        break
    if K[i] == 2:
        ans *= 2
        ans %= 10 ** 9 + 7
print(ans)

import collections

n = int(input())
a = list(map(int, input().split()))
cnt = collections.Counter(a)
mod = 7 + 10**9
if n % 2 == 0:
    for i in range(1, 1 + n // 2):
        if (i * 2 - 1) not in cnt.keys() or cnt[i * 2 - 1] != 2:
            print(0)
            return

else:
    if 0 not in cnt.keys() or cnt[0] != 1:
        print(0)
        return
    for i in range(1, 1 + n // 2):
        if i * 2 not in cnt.keys() or cnt[i * 2] != 2:
            print(0)
            return
print(2 ** (n // 2) % mod)

n = int(input())
a = list(map(int, input().split()))


a = sorted(a)

num = 0
judge = 0

if len(a)%2 == 1:
    if a[0] == 0:
        for i in range(1, n, 2):
            if a[i] == i+1 and a[i+1] == i+1:
                num += 1
            else:
                print(0)
                judge = 1
                break
    else:
        print(0)
        judge=1
else:
    for i in range(0, n, 2):
            if a[i] == i+1 and a[i+1] == i+1:
                num += 1
            else:
                print(0)
                judge = 1
                break
        
if judge == 0:
    result = (2**num)%(10**9+7)
    print(result)

from collections import defaultdict
N = int(input())
A = list(map(int, input().split()))

L = A[:]
L = list(set(L))

mod = 10 ** 9 + 7

d = defaultdict(int)
for i in range(N):
    d[A[i]] += 1

if N % 2 == 1:
    bfr = 0
    for i in L:
        if i - bfr != 2 and i != 0:
            print((0))
            return

        if i == 0:
            if d[i] != 1:
                print((0))
                return
            else:
                continue
        if d[i] != 2:
            print((0))
            return
        bfr = i

    print(((2 ** (N // 2)) % mod))
else:
    bfr = 1
    for i in L:
        if i - bfr != 2 and i != 1:
            print((0))
            return

        if d[i] != 2:
            print((0))
            return
        bfr = i

    print(((2 ** (N // 2)) % mod))


n = int(input())
a = list(map(int,input().split()))
mod = 10**9+7

a.sort()

if n%2 == 1: 
    if a[0] != 0:
        print((0))
        return
    else:
        a.remove(0)
        tmp = 2
else:
    tmp = 1

for i in range(n//2):
    if tmp == a[0] and tmp == a[1]:
        a.remove(tmp)
        a.remove(tmp)
    else:
        print((0))
        return
    tmp += 2

if len(a) == 0:
    print(((2**(n//2))%mod))
else:
    print((0))




n = int(input())
a = list(map(int, input().split()))
mod = 10 ** 9 + 7
num_map = [0] * ((n + 2 - 1) // 2)
for i in range(n):
    num_map[a[i] // 2] += 1

res = 1
if n % 2 == 1:
    if num_map[0] != 1:
        print((0))
    else:
        for i in range(1, (n + 2 - 1) // 2):
            if num_map[i] != 2:
                print((0))
                break
            else:
                res = res * 2 % mod
        else:
            print(res)
else:
    for i in range((n + 2 - 1) // 2):
        if num_map[i] != 2:
            print((0))
            break
        else:
            res = res * 2 % mod
    else:
        print(res)


N=int(input())
A=list(map(int,input().split()))
mod = 10**9+7

A=tuple(sorted(A))

if N % 2 == 1:
  nums=[0]
  for i in range(2,N+1,2):
    nums.append(i)
    nums.append(i)
else:
  nums=[]
  for i in range(1,N+1,2):
    nums.append(i)
    nums.append(i)
    
nums = tuple(nums)
if A != nums:
  print(0)
  return
  
print(2**(N//2) % mod)

N = int(input())
A = list(map(int,input().split()))
A.sort()
mod = 10**9 + 7
if N%2 == 0:
    for i in range(N):
        if A[i] != 1+(i//2)*2:
            print(0)
            break
    else:
        print(pow(2,N//2,mod))
else:
    if A[0] == 0:
        for i in range(1,N):
            if A[i] != ((i+1)//2)*2:
                print(0)
                break
        else:
            print(pow(2,N//2,mod))

n = int(input())
a = list(map(int,input().split()))
mod = 10**9 + 7

d = [0]*(n+1)
for x in a:
    d[x] += 1
ans = 1
if n%2 == 0:
    sw = 1
    for i,x in enumerate(d):
        if i%2 != 0:
            if x == 2:
                ans *= 2
                ans %= mod
            else:
                sw = 0
                break
        else:
            if x != 0:
                sw = 0
                break
else:
    sw = 1
    for i,x in enumerate(d):
        if i%2 == 0:
            if i == 0:
                if x != 1:
                    sw = 0
                    break
            else:
                if x == 2:
                    ans *= 2
                    ans %= mod
                else:
                    sw = 0
                    break
        else:
            if x != 0:
                sw = 0
                break
if sw == 0:
    ans = 0
print(ans)


N = int(input())
A = sorted(list(map(int,input().split())))

if N%2==0:
  B = [1+2*(n//2) for n in range(N)]
else:
  B = [2*(n//2) for n in range(1,1+N)]

if A==B:
  print(pow(2,N//2,10**9+7))
else:
  print(0)

import bisect, collections, copy, heapq, itertools, math, string, sys
input = lambda: sys.stdin.readline().rstrip() 
sys.setrecursionlimit(10**7)
INF = float('inf')
MOD = 10 ** 9 + 7
def I(): return int(input())
def F(): return float(input())
def SS(): return input()
def LI(): return [int(x) for x in input().split()]
def LI_(): return [int(x)-1 for x in input().split()]
def LF(): return [float(x) for x in input().split()]
def LSS(): return input().split()

def resolve():
    N = I()
    A = LI()

    if N % 2 == 0:
        if sorted(A) == [i // 2 * 2 + 1 for i in range(N)]:
            print((pow(2, N // 2, MOD)))
        else:
            print((0))
    else:
        if sorted(A) == [(i // 2 + 1) * 2 for i in range(-1, N - 1)]:
            print((pow(2, (N - 1) // 2, MOD)))
        else:
            print((0))

def __starting_point():
    resolve()

__starting_point()

def PowerMod(N,P,Mod):
    if N%Mod==0:
        return 0
    else:
        PowM = 1
        for TP in range(1,P+1):
            PowM = (PowM*N)%Mod
        return PowM

from collections import Counter
N = int(input())
A = sorted(Counter([int(T) for T in input().split()]).most_common(),key=lambda X:X[0])
PassFlag = True
if N%2==1:
    for TA in range(0,(N+1)//2):
        if A[TA][0]!=(2*TA) or A[TA][1]!=(1+(A[TA][0]!=0)):
            PassFlag = False
            break
    print([0,PowerMod(2,(N-1)//2,10**9+7)][PassFlag])
else:
    for TA in range(0,N//2):
        if A[TA][0]!=(2*TA+1) or A[TA][1]!=2:
            PassFlag = False
            break
    print([0,PowerMod(2,N//2,10**9+7)][PassFlag])

from collections import Counter

n = int(input())
c = Counter(list(map(int, input().split())))

ans = 0
for k, v in list(c.items()):
    if k == 0:
        if n%2==0 and v > 2:
            print((0))
            return
        elif n%2==1 and v > 1:
            print((0))
            return
    else:
        ans += 1
        if v > 2:
            print((0))
            return

print((pow(2, ans, 10**9+7)))


from typing import Counter


n = int(input())
lis = list(map(int, input().split()))
mod  =10**9+7

ans = 0
if n % 2 == 0:
    b = Counter(lis)
    flag = 1
    for i in list(b.values()):
        if i == 2:
            pass
        else:
            flag = 0
            break
    if flag:
        ans = 2**(n//2)
        print((ans % mod))
    else:
        print((0))
else:
    lis = sorted(lis)
    lis = lis[1:]
    b = Counter(lis)
    flag = 1
    for i in list(b.values()):
        if i == 2:
            pass
        else:
            flag = 0
            break
    if flag:
        ans = 2**(n//2)
        print((ans % mod))
    else:
        print((0))


n=int(input())
a=list(map(int,input().split()))
flag=0
A=a.sort()
num=[]

if n%2==0:
    for i in range(1,n,2):
        num.append(i)
        num.append(i)

if n%2==1:
    num=[0]
    for i in range(2,n,2):
        num.append(i)
        num.append(i)

if num==a:
    print(2**(n//2)%(10**9+7))

else:
    print("0")

N=int(input())
*A,=sorted(map(int,input().split()))

f=lambda:2**(N//2)%(10**9+7)
a=True
if N%2==0:
    for i in range(1,N,2):
        if A[i-1]!=i or A[i]!=i:
            # print(i,A[i-1],A[i])
            a=False
            break
else:
    if A[0]!=0:
            a=False
    else:
        for i in range(2,N,2):
            if A[i-1]!=i or A[i]!=i:
                # print(i,A[i-1],A[i])
                a=False
                break
print(f() if a else 0)

n = int(input())
A = list(map(int, input().split()))

d = {}
for a in A:
    d[a] = d.get(a, 0)+1

zero_cnt = 0
two = 0
no = 0
for i in d:
    if i==0:
        zero_cnt+=1
    elif d[i]==2:
        two+=1
    else:
        no+=1

if no!=0 or (n%2==0 and zero_cnt!=0) or (n%2==1 and zero_cnt!=1):
    print((0))
else:
    ans = 1
    mod = 10**9+7
    for i in range(two):
        ans *= 2
        ans %= mod
    print((ans%mod))


MOD = 10 ** 9 + 7
num = [0] * (10 ** 5 + 1)
N = int(input())
A = list(map(int,input().split()))
for i in range(len(A)):
	num[A[i]] += 1
if N % 2 == 1:
	for i in range(0,N,2):
		cnt = num[i]
		if i == 0:
			if cnt != 1:
				print(0)
				return
		else:
			if cnt != 2:
				print(0)
				return
	print(2 ** (N // 2) % MOD)
else:
	for i in range(1,N,2):
		cnt = num[i]
		if cnt != 2:
			print(0)
			return
	print(2 ** (N // 2) % MOD)

N=int(input())
*A,=sorted(map(int,input().split()))

def f(x):
 for i in range(x,N,2):
  if A[i-1]!=i or A[i]!=i:
    return False
 return True   
    
a=True
if N%2==0:a=f(1)
else:
 if A[0]!=0:a=False
 else:a=f(2)
print(2**(N//2)%(10**9+7) if a else 0)

import sys

read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
sys.setrecursionlimit(10 ** 9)
INF = 1 << 60
MOD = 1000000007


def main():
    N, *A = list(map(int, read().split()))

    A.sort()

    ok = True
    if len(A) % 2 == 0:
        for i in range(N // 2):
            if not A[2 * i] == A[2 * i + 1] == 2 * i + 1:
                ok = False
                break
    else:
        if A[0] != 0:
            ok = False
        else:
            for i in range(N // 2):
                if not A[2 * i + 1] == A[2 * i + 2] == 2 * i + 2:
                    ok = False
                    break

    if ok:
        ans = pow(2, N // 2, MOD)
    else:
        ans = 0

    print(ans)

    return


def __starting_point():
    main()

__starting_point()

N = int(input())
A = list(map(int, input().split()))

m = 1000000007

A.sort()
if N % 2 == 0:
    B = list(range(1, N, 2)) * 2
else:
    B = [0] + list(range(2, N, 2)) * 2
B.sort()

if A != B:
    print((0))
else:
    result = 1
    for i in range(N // 2):
        result *= 2
        result %= m
    print(result)


N = int(input())
A = [int(x) for x in input().split()]

from collections import defaultdict as dd
Dict = dd(lambda:0)
for a in A:
    Dict[a] += 1

if N & 1: Dict[0] += 1
f = (lambda:(lambda x:0 if x&1 else 2) if N&1 else (lambda x:2 if x&1 else 0))()
Possible = {i:f(i) for i in range(N)}
for key,value in list(Dict.items()):
    if value != Possible[key]:
        print((0))
        return
else:
    print((2**(N//2)%1000000007))
                



import sys

# n = 10 ** 5
# データ読み込み関係
n = int(input())

a = list(map(int, input().split(' ')))

record = {}

possible = True

# 状況が実現可能か確認
for e in a:
    if(e in record.keys()):
        record[e] += 1
        if(record[e] == 2):
            if(e == 0):
                possible = False
                break
        if(record[e] == 3):
            possible = False
            break
    else:
        record[e] = 1

if(possible == False):
    print(0)
    return

multiCount = int(n / 2)

print(2 ** multiCount % (10 ** 9 + 7))

import collections
N = int(input())
A = list(map(int,input().split()))
ans = 1
if 0 in A:
    A.remove(0)
Acounter = collections.Counter(A)
for i in Acounter.values():
    if i == 2:
        continue
    else:
        ans = 0
        break
if ans == 0:
    pass
if ans != 0:
    for i in range(N//2):
        ans = (ans * 2) % (10**9 + 7)
print(ans)

import sys
sys.setrecursionlimit(10 ** 7)
def input() : return sys.stdin.readline().strip()
def INT()   : return int(input())
def MAP()   : return map(int,input().split())
def LIST()  : return list(MAP())
def NIJIGEN(H): return [list(input()) for i in range(H)]
mod=1000000007
N=INT()
L=LIST()
if N%2==0:
  A=range(1,N,2)
  B=range(1,N,2)
else:
  A=range(0,N,2)
  B=range(2,N,2)
A,B=list(A),list(B)
A=A+B
if sorted(A)==sorted(L):
  print(pow(2,N//2,mod))
else:
  print(0)

n=int(input())
a=list(map(int,input().split()))

b=[0 for i in range(10**5+1)]
for i in a:
  b[i]+=1

if (n%2==0 and b[0]!=0) or (n%2==1 and b[0]!=1):
  print(0)
  return

ans=1
mod=10**9+7
for i in b:
  if i==2:
    ans*=2
    ans%=mod
  if i>=3:
    print(0)
    return

print(ans)

from collections import Counter

n=int(input())
a=list(map(int,input().split()))

c=Counter(a)

if (n%2==0 and c[0]!=0) or (n%2==1 and c[0]!=1):
  print(0)
  return

ans=1
mod=10**9+7
for i in c:
  if c[i]==2:
    ans*=2
    ans%=mod
  if c[i]>=3:
    print(0)
    return

print(ans)

from collections import Counter

N = int(input())
abs_diffs = list(map(int, input().split()))

if N % 2 == 0:
    expected = [i // 2 * 2  + 1 for i in range(N)]
    dims = N // 2
else:
    expected = [(i + 1) // 2 * 2 for i in range(N)]
    dims = (N - 1) // 2

if sorted(abs_diffs) == expected:
    print((2 ** dims % (10 ** 9 + 7)))

else:
    print((0))


n = int(input())
A = sorted(map(int,input().split()))

if n % 2 == 1:
    ex = [0]
    
    for i in range(n//2):
        a = 2 * (i+1)
        ex += [a,a]
        
else:
    ex = []
    a = 1
    
    for i in range(n//2):
        ex += [a,a]
        a += 2
        
ans = 0

if A == ex:
    ans = 2 ** (n//2) % (10**9 + 7)
    
print(ans)

n = int(input())
a = list(map(int, input().split()))
mod = 10 ** 9 + 7
if n % 2 == 0:
    b = [2 if i % 2 == 1 else 0 for i in range(n)]
else:
    b = [2 if i % 2 == 0 else 0 for i in range(n)]
    b[0] = 1
c = [0 for i in range(n)]
for i in range(n):
    c[a[i]] += 1
if b != c:
    print(0)
else:
    ans = 1
    for i in range(n // 2):
        ans *= 2
        ans %= mod
    print(ans)

N = int(input())
A = sorted(list(map(int,input().split())))

if N%2==0:
  B = [2*(n//2)+1 for n in range(N)]
else:
  B = [2*(n//2) for n in range(1,N+1)]

if A==B:
  print(pow(2,N//2,10**9+7))
else:
  print(0)

MOD = 10**9+7

def fast_pow(x, n, MOD):
    res = 1
    while n:
        if n & 1:
            res = res * x % MOD
        x = x * x % MOD
        n >>= 1
    return res


n = int(input())
a = list(map(int, input().split()))

d = {}
for i in a:
    if n % 2:
        if i > 0 and i % 2:
            print((0))
            return
    else:
        if i > 0 and i % 2 == 0:
            print((0))
            return

    if not i in d:
        d[i] = 1
    elif d[i] == 1:
        d[i] += 1
    else:
        print((0))
        return

if n % 2:
    if d[0] != 1:
        print((0))
        return
    print((fast_pow(2, len(d)-1, MOD)))
else:
    if 0 in d:
        print((0))
        return
    print((fast_pow(2, len(d), MOD)))


import math
N = int(input())
A = list(map(int, input().split()))

flag = True
if N%2 == 0:
    if 0 in A or len(set(A)) != N//2:
        flag = False
else:
    if len([0 for a in A if a == 0]) != 1 or len(set(A)) != N//2 + 1:
        flag = False

if  flag:
    print((2**((N//2))%(10**9+7)))
else:
    print((0))


N=int(input())
*A,=sorted(map(int,input().split()))

def f(x):
 for i in range(x,N,2):
  if A[i-1]!=i or A[i]!=i:
    return 0
 return 1   
    
a=1
if N%2==0:a=f(1)
else: a=A[0]==0 and f(2)
print(2**(N//2)%(10**9+7)*a)

n = int(input())
A = tuple(map(int, input().split()))
mod = 10**9+7

niseven = (n%2 == 0)

cd = dict()
for a in (A):
    cd.setdefault(a, 0)
    cd[a] += 1
    if a == 0 and cd[a] > 1:
        print((0))
        break
    if a > 0 and cd[a] > 2:
        print((0))
        break
    if (a%2==0) == niseven:
        print((0))
        break
else:
    print((pow(2, n//2, mod)))


def main():
  N=int(input())
  A=list(map(int,input().split()))
  mod=10**9+7
  ans=1
  A.sort()
  if N%2==0:
    for i in range(0,N,2):
      if A[i]!=A[i+1] or A[i]!=i+1:
        print(0)
        return
      ans=ans*2%mod
    print(ans)
  else:
    if A[0]!=0:
      print(0)
      return
    ans=1
    for i in range(1,N,2):
      if A[i]!=A[i+1] or A[i]!=i+1:
        print(0)
        return
      ans=ans*2%mod
    print(ans)
def __starting_point():
  main()
__starting_point()

n = int(input())
a = list(map(int, input().split()))

# 矛盾チェック
from collections import Counter
c = Counter(a)

def check():
    if n&1:
        if c[0]!=1:
            return False
        for i in range((n-1)//2):
            if c[2*(i+1)] != 2:
                return False
    else:
        for i in range(n//2):
            if c[2*i+1] != 2:
                return False
    return True

if not check():
    print(0)
    return

print(pow(2, n//2, 10**9+7))

n = int(input())
a = list(map(int,input().split()))
dic = {}
for i in range(n):
    dic.setdefault(a[i],0)
    dic[a[i]] += 1
ans = 1
for key,value in dic.items():
    #偶数
    if n%2==0:
        if n > key and key%2==1 and value==2:
            ans *= 2
        else:
            ans = 0
            break
    #奇数
    else:
        if n > key and key%2==0:
            if key==0 and value==1:
                ans *= 1
            elif value==2:
                ans *= 2
            else:
                ans = 0
                break
        else:
            ans = 0
            break
print(ans%(10**9+7))

N=int(input())
MOD=10**9+7
A=[int(x) for x in input().split()]
flag=1#その並び順がありえるなら1、そうでないなら0
set1=set()
set2=set()
if N%2==1:
    set1.add(0)
    for j in range(2,N+1,2):
        set1.add(j)
        set2.add(j)
    for i in range(N):
        now=A[i]
        if now in set1:
            set1.remove(now)
        elif now in set2:
            set2.remove(now)
        else:
            flag=0
            break
    if len(set1)!=0 or len(set2)!=0:
        flag=0
else:
    for k in range(1,N+1,2):
        set1.add(k)
        set2.add(k)
    for p in range(N):
        now=A[p]
        if now in set1:
            set1.remove(now)
        elif now in set2:
            set2.remove(now)
        else:
            flag=0
            break
    if len(set1)!=0 or len(set2)!=0:
        flag=0
if flag==0:
    print((0))
else:
    ans=1
    div2=N//2
    for q in range(div2):
        ans*=2
        ans%=MOD
    print(ans)


N = int(input())
A = list(map(int, input().split()))

m = 1000000007

A.sort()
if N % 2 == 0:
    B = list(range(1, N, 2)) * 2
else:
    B = [0] + list(range(2, N, 2)) * 2
B.sort()

if A != B:
    print((0))
else:
    result = 1
    for i in range(N // 2):
        result *= 2
        result %= m
    print(result)


from collections import Counter

N,*A = map(int, open(0).read().split())
ac = Counter(A)
if N % 2 == 0:
    for i in range(1,N,2):
        if ac[i] != 2:
            print(0)
            break
    else:
        print(pow(2,N//2,1000000007))
else:
    if ac[0] != 1:
        print(0)
    else:
        for i in range(2,N,2):
            if ac[i] != 2:
                print(0)
                break
        else:
            print(pow(2,N//2,1000000007))

n=int(input())
a=list(map(int,input().split()))
if n%2==1:
    x=[i for i in range(n)]
    for i in range(n):
        if i%2==1:
            x[i]+=1
else:
    x=[i for i in range(n)]
    for i in range(n):
        if i%2==0:
            x[i]+=1
a.sort()
if x==a:
    print(pow(2,(n//2),10**9+7))
else:
    print(0)

import sys
from collections import deque
p=10**9+7

def main(n,a):
  h=n//2
  g=n%2
  a.sort()
  c=[2*(x//2)+g+1 for x in range(n-g)]
  if g==1:
    c.insert(0,0)
  if a!=c:
      return 0
  return 2**(h%(p-1)) % p

def __starting_point():
  n=int(input())
  a=list(map(int,sys.stdin.readline().strip().split()))
  print((main(n,a)))

__starting_point()

N=int(input())
S=list(map(int,input().split()))
lenS=len(S)
T=[]
for i in range(1,N+1):
    T.append(abs(i-(N+1-i)))

T.sort()
S.sort()



for i in range(N):
    if T[i]!=S[i]:
        print((0))
        return


ans=1
nagasa=lenS//2
for i in range(nagasa):
    
    ans=(ans*2)%(10**9+7)

print(ans)




n = int(input())
a = sorted(list(map(int, input().split())))

if n%2 == 0: # 人数が偶数の場合に不整合があるか確認
  for i in range(0,n,2):
    if a[i] != i+1 or a[i] != a[i+1]:
      print(0)
      return
else: # 人数が奇数の場合に不整合があるか確認
  if a[0] != 0: # 差分が0存在していることを確認
    print(0)
    return
  else:
    for i in range(1,n,2):
      if a[i] != i+1 or a[i] != a[i+1]:
        print(0)
        return

ans = 1
for i in range(n//2):
  ans = ans * 2 % (10**9+7) # 組み合わせとしては同じ差分の値を入れ替える2択になるので、結果を2倍にする
print(ans)

N=int(input())
*A,=sorted(map(int,input().split()))

a=True
if N%2==0:
 for i in range(1,N,2):
  if A[i-1]!=i or A[i]!=i:
    a=False
    break
else:
 if A[0]!=0:a=False
 else:
    for i in range(2,N,2):
     if A[i-1]!=i or A[i]!=i:
        a=False
        break
print(2**(N//2)%(10**9+7) if a else 0)

import math
N = int(input())
A = list(map(int, input().split()))

flag = True
if N%2 == 0:
    if 0 in A or len(set(A)) != N//2:
        flag = False
else:
    if len([0 for a in A if a == 0]) != 1 or len(set(A)) != N//2 + 1:
        flag = False

if  flag:
    print((2**(math.floor(N/2))%(10**9+7)))
else:
    print((0))


from collections import Counter

n = int(input())
A = list(map(int, input().split()))
cnt_A = Counter(A)

if all([v == 2 for k, v in cnt_A.items() if k != 0]):
    print(pow(2, n // 2, 10**9 + 7))
else:
    print(0)

N=int(input())
MOD=1000000007
A=list(map(int,input().split()))
cnt=[0 for i in range(N)]
for i in range(N):
    cnt[A[i]]+=1
if N%2==0:
    for i in range(1,N,2):
        if cnt[i]!=2:
            print((0))
            break
    else:
        print((2**(N//2)%MOD))
else:
    if cnt[0]!=1:
        print((0))
    else:
        for i in range(2,(N+1)//2,2):
            if cnt[i]!=2:
                print((0))
                break
        else:
            print((2**((N-1)//2)%MOD))


import collections
import sys
input = sys.stdin.readline

N = int(input())
A = list(map(int,input().split()))
m = 1000000007

flag0 = 1
count = 0
#偶数だったら
if N %2 ==0:
    colA = collections.Counter(A)
    for key,val in list(colA.items()):
        if key%2 != 1 or val != 2:
            flag0 = 0
            break
    for i in range(1,N,2):
        if i not in list(colA.keys()):
            flag = 0
            break
        else:
            count +=1
#奇数だったら
else:
    A.append(0)
    colA = collections.Counter(A)
    for key,val in list(colA.items()):
        if key%2 != 0 or val != 2:
            flag0 = 0
            break
    for i in range(0,N,2):
        if i not in list(colA.keys()):
            flag = 0
            break
        else:
            count +=1
    count -=1


print((((2**count)%m)*flag0))