N = int(eval(input()))

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

A.sort()

ans = 0

flag = True

if N % 2 == 1:

  # 奇数個の場合、0,2,2,4,4,～みたいに並んでるはず

  if A[0] == 0:

    for i in range(1, N, 2):

      if A[i] != i+1 or A[i+1] != i+1:

        flag = False

        break

    if flag:

      ans = 2**(N//2) % (10**9+7)

else:  

  # 偶数個の場合、1,1,3,3,5,5,～のように並んでるはず

  if A[0] != 0:

    for i in range(0, N, 2):

      if A[i] != i+1 or A[i+1] != i+1:

        flag = False

        break

    if flag:

      ans = 2**(N//2) % (10**9+7)

print(ans)      
N = int(eval(input()))

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

MOD = 10**9+7



if N % 2 == 1: # 0を2個にする

  A.append(0)



A.sort()

od = tuple(A[::2])

ev = tuple(A[1::2])

# Ai と Biで、ある値の登場する回数が等しくなかった場合、明らかに答えは 0 

if od == ev:

  comb = (2**(N//2)) % MOD

  print(comb)

else:

  # 左右対称じゃなく報告と矛盾

  print((0))
N = int(eval(input()))
A = list(map(int, input().split()))
A.sort()
ans = 0
flag = True
if N % 2 == 1:
    # 奇数個の場合、0,2,2,4,4,～みたいに並んでるはず
    if A[0] == 0:
        for i in range(1, N, 2):
            if A[i] != i + 1 or A[i + 1] != i + 1:
                flag = False
                break
        if flag:
            ans = 2 ** (N // 2) % (10**9 + 7)
else:
    # 偶数個の場合、1,1,3,3,5,5,～のように並んでるはず
    if A[0] != 0:
        for i in range(0, N, 2):
            if A[i] != i + 1 or A[i + 1] != i + 1:
                flag = False
                break
        if flag:
            ans = 2 ** (N // 2) % (10**9 + 7)
print(ans)

N = int(eval(input()))
A = list(map(int, input().split()))
MOD = 10**9 + 7
if N % 2 == 1:  # 0を2個にする
    A.append(0)
A.sort()
od = tuple(A[::2])
ev = tuple(A[1::2])
# Ai と Biで、ある値の登場する回数が等しくなかった場合、明らかに答えは 0
if od == ev:
    comb = (2 ** (N // 2)) % MOD
    print(comb)
else:
    # 左右対称じゃなく報告と矛盾
    print((0))

+MOD = 10**9 + 7 +if N % 2 == 1:  # 0を2個にする +    A.append(0) -ans = 0 -flag = True -if N % 2 == 1: -    # 奇数個の場合、0,2,2,4,4,～みたいに並んでるはず -    if A[0] == 0: -        for i in range(1, N, 2): -            if A[i] != i + 1 or A[i + 1] != i + 1: -                flag = False -                break -        if flag: -            ans = 2 ** (N // 2) % (10**9 + 7) +od = tuple(A[::2]) +ev = tuple(A[1::2]) +# Ai と Biで、ある値の登場する回数が等しくなかった場合、明らかに答えは 0 +if od == ev: +    comb = (2 ** (N // 2)) % MOD +    print(comb) -    # 偶数個の場合、1,1,3,3,5,5,～のように並んでるはず -    if A[0] != 0: -        for i in range(0, N, 2): -            if A[i] != i + 1 or A[i + 1] != i + 1: -                flag = False -                break -        if flag: -            ans = 2 ** (N // 2) % (10**9 + 7) -print(ans) +    # 左右対称じゃなく報告と矛盾 +    print((0))