Problem:


Score : 300 points

Problem Statement

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 1

5
2 4 4 0 2

Sample Output 1

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

Sample Input 2

7
6 4 0 2 4 0 2

Sample Output 2

0

Any order would be inconsistent with the reports, thus the answer is 0.

Sample Input 3

8
7 5 1 1 7 3 5 3

Sample Output 3

16



Sample input:
5
2 4 4 0 2


Sample output:
4

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
mod = 10**9+7
n =int(input())
A = list(map(int,input().split()))
tmp = []
for i in range(n):
    tmp.append(abs(n-2*i-1))
A.sort()
tmp.sort()
for a,t in zip(A,tmp):
    if a!=t:
        print(0);exit()
from collections import Counter
from math import factorial
ans = 1
cnt_a = Counter(A)
for k,v in cnt_a.items():
    ans *= factorial(v)
    ans %=mod
print(ans)

Submission status: Accepted

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

a.sort()

if n%2==0:
    for i in range(n//2):
        if a[i*2]!=i*2+1 or a[i*2+1]!=i*2+1:
            print(0)
            exit()
    
    print((2**(n//2))%mod)


else:
    if a[0]!=0:
        print(0)
        exit()
    
    b=a[1:]

    for i in range(n//2):
        if b[i*2]!=i*2+2:
            print(0)
            exit()
        
        if b[i*2+1]!=i*2+2:
            print(0)
            exit()

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

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
import math

def fail():
    print(0)
    exit()

def main():
    n = int(input())
    As = list(map(int, input().split(' ')))
    ind_lis = {}
    idx = n - 1
    while idx >= 0:
        ind_lis[idx] = 0
        idx -= 2
    for a in As:
        if a not in ind_lis:
            fail()
        ind_lis[a] += 1
        if a == 0 and ind_lis[a] > 1:
            fail()
        elif ind_lis[a] > 2:
            fail()
    print(2**(n//2)%(10**9 + 7))



if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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))

Submission status: Accepted

Solution code:
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)
            exit()

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

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

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

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

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
N = int(input())
mod = 10 ** 9 + 7
A = list(map(int, input().split()))
B = [0 for i in range(N)]
for a in A:
  B[a] += 1
f = 0
if N % 2 == 0:
  ans = 1
  for i in range(1, N, 2):
    if B[i] != 2:
      f = 1
      break
    else:
      ans = ans * 2 % mod
  if f == 1:
    print(0)
  else:
    print(ans)
else:
  ans = 1
  if B[0] != 1:
    f = 1
  if f ==0:
    for i in range(2, N + 1, 2):
      if B[i] != 2:
        f = 1
        break
      else:
        ans = ans * 2 % mod
  if f == 1:
    print(0)
  else:
    print(ans)

Submission status: Accepted

Solution code:
from collections import Counter

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

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

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

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)
            exit()
    else:
        if i > 0 and i % 2 == 0:
            print(0)
            exit()

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

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

Submission status: Accepted

Solution code:
N = int(input())
A=list(map(int, input().split()))
from collections import Counter


c = Counter(A)
MOD = 10**9 + 7
if N % 2 == 0:
    is_ok = 1
    cnt = 0
    for num in range(1, N, 2):
        cnt += 1
        if c[num] != 2:
            is_ok=0
            break
    if not is_ok:
        print(0)
        exit()
    print(pow(2, cnt, MOD))
else:
    is_ok = 1
    cnt = 0
    if c[0] != 1:
        is_ok = 0
    for num in range(2, N, 2):
        cnt += 1
        if c[num] != 2:
            is_ok = 0
            break
    if not is_ok:
        print(0)
        exit()
    print(pow(2, cnt, MOD))

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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))

Submission status: Accepted

Solution code:
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 Dict.items():
    if value != Possible[key]:
        print(0)
        exit()
else:
    print(2**(N//2)%1000000007)

Submission status: Accepted

Solution code:
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)
            exit()
    ans = pow(2,N//2)
    print(ans%mod)
else:
    if A[0] != 0:
        print(0)
        exit()
    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)
            exit()
    ans = pow(2,N//2)
    print(ans%mod)

Submission status: Accepted

Solution code:
n = int(input())
a = list(map(int, input().split()))
a.sort()
if n == 1:
    if a[0] == 0:
        print(1)
    else:
        print(0)
    exit()

mod = 10**9 + 7
if n % 2 == 1:
    if a[0] == 0 and a[1] == 0:
        print(0)
        exit()
    ans = 1
    for i in range(1, n, 2):
        if not(a[i] == a[i+1] and a[i] == i+1):
            print(0)
            exit()
        else:
            ans *= 2
    print(ans % mod)
else:
    ans = 1
    for i in range(0, n, 2):
        if not(a[i] == a[i+1] and a[i] == i+1):
            print(0)
            exit()
        else:
            ans *= 2
    print(ans % mod)

Submission status: Accepted

Solution code:
from collections import Counter

N = int(input())
abs_diffs = 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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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 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)

Submission status: Accepted

Solution code:
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)
    exit()

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

Submission status: Accepted

Solution code:
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)
    exit()

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

Submission status: Accepted

Solution code:
import sys
n=int(input())
a=sorted(list(map(int,input().split())))
ans=1
flag=(n+1)%2
if flag==0:
  if a[0]==0:
    a.pop(0)
  else:
    print(0)
    sys.exit()
else:
  if a[0]==a[1]==1:
    a.pop(0)
    a.pop(0)
    ans*=2
  else:
    print(0)
    sys.exit()
for i in range((n-flag-1)//2):
  if a[i*2]==a[i*2+1]==flag+(i+1)*2:
    ans*=2
  else:
    print(0)
    sys.exit()
print(ans%(10**9+7))

Submission status: Accepted

Solution code:
import sys
from collections import defaultdict
def input(): return sys.stdin.readline().strip()
mod = 10**9+7

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

    if N % 2 != 0:
        d = {2 * i: 0 for i in range(N // 2 + 1)}
        for a in A:
            try:
                d[a]  += 1
            except:
                print(0)
                return
        if d[0] != 1:
            print(0)
            return
        for key in d:
            if key == 0: continue
            if d[key] != 2:
                print(0)
                return
    else:
        d = {2 * i + 1: 0 for i in range(N // 2)}
        for a in A:
            try:
                d[a] += 1
            except:
                print(0)
                return
        for key in d:
            if d[key] != 2:
                print(0)
                return
    print(pow(2, N // 2, mod))

if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
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)
        exit()
for i in d.values():
    if i!=0:
        print(0)
        exit()
print((2**(n//2))%mod)

Submission status: Accepted

Solution code:
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)
        exit()
for i in d.values():
    if i!=0:
        print(0)
        exit()
print((2**(n//2))%mod)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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])

Submission status: Accepted

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

mod=10**9+7
a.sort()

if n%2==0:
  b=[]
  for i in range(n//2):
    b.append((i*2+1))
    b.append((i*2+1))
  if a==b:
    ans=1
    for _ in range(n//2):
      ans=ans*2
      ans=ans%mod
      
    print(ans)
    
  else:
    print(0)
    
else:
  b=[0]
  for i in range((n-1)//2):
    b.append(((i+1)*2))
    b.append(((i+1)*2))
    
  if a==b:
    ans=1
    for i in range((n-1)//2):
      ans=ans*2
      ans=ans%mod
      
    print(ans)
      
  else:
    print(0)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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()

Submission status: Accepted

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

if n == 1:
  print(1)
  exit()
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)
      exit()
  if a[-2] != a[-1]:
    print(0)
    exit()
else:
  if a[0] != 0 or a[1] == 0:
    print(0)
    exit()
  for i in range(1,n-2,2):
    if a[i] != a[i+1] or a[i] == a[i+2]:
      print(0)
      exit()
  if a[-2] != a[-1]:
    print(0)
    exit()

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

Submission status: Accepted

Solution code:
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")

Submission status: Accepted

Solution code:
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 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 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)

Submission status: Accepted

Solution code:
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);exit()
else:
    if C.get(0) !=1:
        print(0);exit()
    for i in range(2,n,2):
        if C.get(i)!=2:
            print(0);exit()

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

Submission status: Accepted

Solution code:
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))

Submission status: Accepted

Solution code:
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)
  exit()
  
print(2**(N//2) % mod)

Submission status: Accepted

Solution code:
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 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 b.values():
        if i == 2:
            pass
        else:
            flag = 0
            break
    if flag:
        ans = 2**(n//2)
        print(ans % mod)
    else:
        print(0)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)
        exit()
ans=1
for i in range(n):
    if n%2==0:
        if i%2==0:
            if l[i]!=0:
                print(0)
                exit()
    else:
        if i%2==1:
            if l[i]!=0:
                print(0)
                exit()
    
    if l[i]==2:
        ans*=2
    elif l[i]>2:
        print(0)
        exit()
    ans%=(10**9 +7)
print(ans)

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
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)
        exit()
print(2 ** (n // 2) % (10 ** 9 + 7))

Submission status: Accepted

Solution code:
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)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int,input().split()))
T = [0]*N
for i in range(N):
    T[A[i]]+=1
flag = 0
if N%2==1:
    for i in range(N):
        if i==0 and T[i]!=1:
            flag = 1
        elif i%2==0 and i>=2 and T[i]!=2:
            flag = 1
elif N%2==0:
    for i in range(N):
        if i%2==1 and T[i]!=2:
            flag = 1
if flag==1:
    print(0)
else:
    if N%2==1:
        print(pow(2,(N-1)//2,10**9+7))
    else:
        print(pow(2,N//2,10**9+7))

Submission status: Accepted

Solution code:
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)
      exit()
else: # 人数が奇数の場合に不整合があるか確認
  if a[0] != 0: # 差分が0存在していることを確認
    print(0)
    exit()
  else:
    for i in range(1,n,2):
      if a[i] != i+1 or a[i] != a[i+1]:
        print(0)
        exit()

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

Submission status: Accepted

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

Submission status: Accepted

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

mod = 10 ** 9 + 7

cnt = [0] * n
for v in a:
    cnt[v] += 1

res = 1

if n % 2 == 1:
    if cnt[0] != 1:
        print(0)
        exit()
    
    for i in range(1, n):
        if i % 2 == 1:
            if cnt[i] > 0:
                print(0)
                exit()
        else:
            if cnt[i] == 2:
                res = res * 2 % mod
            else:
                print(0)
                exit()
    
else:
    for i in range(1, n):
        if i % 2 == 0:
            if cnt[i] > 0:
                print(0)
                exit()
        else:
            if cnt[i] == 2:
                res = res * 2 % mod
            else:
                print(0)
                exit()

print(res)

Submission status: Accepted

Solution code:
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)