n=int(input())

mod=10**9+7

pp={}
pp_k=set([])

pm={}
pm_k=set([])

from fractions import gcd


for _ in range(n):
    a,b=map(int,input().split())
    tmp=gcd(a,b)
    a=a//tmp
    b=b//tmp

    if a*b>0:
        if (a,b) in pp_k:
            pp[(a,b)]+=1
        else:
            pp[(a,b)]=1
            pp_k.add((a,b))
    else:
        if (a,b) in pm_k:
            pm[(a,b)]+=1
        else:
            pm[(a,b)]=1
            pm_k.add((a,b))

result=pow(2,n,mod)-1

def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p

p = mod #割る数
N = 10 ** 6  # N は必要分だけ用意する
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用
for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)

#print(pp_k,pm_k)
for item in pp_k:

    tmp=0

    a,b=item[0],item[1]
    cnt_pp=pp[item]
    aa=-1*a
    bb=b
    cnt_pm=0
    hoge=(bb,aa)
    #print(hoge)
    if hoge in pm_k:
        #print("Yes")
        cnt_pm+=pm[hoge]
    aa=a
    bb=-1*b
    hoge=(bb,aa)
    if hoge in pm_k:
        cnt_pm+=pm[hoge]
    #print(item,cnt_pm)
    if cnt_pm>0:
        tmp+=pow(2,max(0,n-cnt_pm-cnt_pp),mod)*(pow(2,cnt_pp,mod)-1)*(pow(2,cnt_pp,mod)-1)
        #print(pow(2,max(0,n-cnt_pm-cnt_pp),mod),(pow(2,cnt_pp,mod)-1),(pow(2,cnt_pp,mod)-1))
        result-=tmp

print(result%mod)
    

    