def cmb(n,r,mod): if r<0 or r>n: return 0 r=min(r,n-r) return g1[n]*g2[r]*g2[n-r]%mod n=int(input()) b=list(map(int,input().split())) mod=10**9+7 g1=[1,1] g2=[1,1] inverse=[0,1] for i in range(2,n+1): g1.append((g1[-1]*i)%mod) inverse.append((-inverse[mod%i]*(mod//i))%mod) g2.append((g2[-1]*inverse[-1])%mod) for i in range(n): if b[i]!=-1: b[i]=format(b[i],'032b') b=[format(0,'032b')]+b inv2=pow(2,mod-2,mod) ct=1 ans=1 p=b[0] for i in range(1,n+1): if b[i]==-1: ct+=1 else: ct00=0;ct01=0;ct11=0 for j in range(32): if p[j]=='1' and b[i][j]=='0': print(0) exit() elif p[j]=='0' and b[i][j]=='0': ct00+=1 elif p[j]=='0' and b[i][j]=='1': ct01+=1 else: ct11+=1 x=pow(2,ct,mod) y=pow(x,ct11,mod) z=pow(x-1,ct01,mod) a=(y*z%mod) for j in range(1,ct+1): x*=inv2 x%=mod y=pow(x,ct11,mod) z=pow(x-1,ct01,mod) w=y*z if j%2==1: a-=(w*cmb(ct,j,mod)%mod) else: a+=(w*cmb(ct,j,mod)%mod) a%=mod ans*=a ans%=mod ct=1 p=b[i] print(ans)