N = int(input())
mod = 10 **9 + 7

def equal(item0, item1, delta = 10 ** (-24)):
    if abs(item0 - item1) < delta:
        return True
    else:
        return False
def bigger(item0, item1, delta = 10** (-24)):
    if item0 -item1 > delta:
        return True
    else:
        return False

ab = []
ba = []
zero = 0
from bisect import insort
for _ in range(N):
    A, B = map(int, input().split())
    if A == 0 or B == 0:
        if A == 0 and B == 0:
            zero += 1
        elif A == 0 and B != 0:
            ab = [0] + ab
        else:
            ba = [0] + ba
    elif (A > 0 and B > 0) or (A < 0 and B < 0):
        insort(ab, A/B)
    elif (A>0 and B <0) or (A<0 and B>0):
        insort(ba, -B/A)

def make_count(list):
    k = 0
    lis = []
    while k < len(list):
        cnt = 1
        while k+1 < len(list):
            if equal(list[k], list[k+1]):
                cnt += 1
                k += 1
            else:
                break
        lis.append([list[k], cnt])
        k += 1
    return lis

ab = make_count(ab)
ba = make_count(ba)
from collections import deque
ab = deque(ab)
ba = deque(ba)
ans = 1 #all pattern
flag = True
pair = []
a = [-2, 0]
b = [-2, 0]
flaga = True
flagb = True

while True:
    if flaga:
        if ab:
            a = ab.popleft()
        else:
            a = [-1, 0]
            flaga = False
    if flagb:
        if ba:
            b = ba.popleft()
        else:
            b = [-1, 0]
            flagb = False
    if a[0] == b[0] == -1:
        break
    elif equal(a[0], b[0]):
        pair.append([a[1], b[1]])
        flaga = True
        flagb = True
        continue
    elif bigger(a[0], b[0]):
        if b[0] == -1:
            pair.append([a[1], 0])
            flaga = True
            continue
        else:
            pair.append([0, b[1]])
            if ba:
                flaga = False
                flagb = True
            continue
    else:
        if a[0] == -1:
            pair.append([0, b[1]])
            flagb = True
            continue
        else:
            pair.append([a[1], 0])
            if ab:
                flaga = True
                flagb = False

ans = 1
for item in pair:
    ans *= pow(2, item[0], mod) + pow(2, item[1], mod) -1
    ans %= mod
ans += zero-1
ans %= mod
print(ans)


