from math import gcd
import sys

input=sys.stdin.readline

N=int(input())
dicplus={}
dicminus={}
dicinf=0
diczero=0
dicnan=0
for i in range(N):
    a,b=map(int,input().split())
    g=gcd(a,b)
    if g==0:
        dicnan+=1
    else:
        A=a//g
        B=b//g
        if A*B>0:
            A=abs(A)
            B=abs(B)
            if (A,B) not in dicplus:
                dicplus[(A,B)]=0
            dicplus[(A,B)]+=1
        elif A*B<0:
            A=abs(A)
            B=abs(B)
            if (A,B) not in dicminus:
                dicminus[(A,B)]=0
            dicminus[(A,B)]+=1
        elif A!=0:
            dicinf+=1
        elif B!=0:
            diczero+=1


ans=1
mod=10**9+7
for a,b in dicplus:
    if (b,a) in dicminus:
        ans*=(pow(2,dicplus[(a,b)],mod)-1+pow(2,dicminus[(b,a)],mod)-1+1)
        ans%=mod
    else:
        ans*=pow(2,dicplus[(a,b)],mod)
        ans%=mod

for a,b in dicminus:
    if (b,a) not in dicplus:
        ans*=pow(2,dicminus[(a,b)],mod)
        ans%=mod

ans*=(pow(2,dicinf,mod)-1+pow(2,diczero,mod)-1+1)
ans%=mod

print(ans-1+dicnan)
