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

def binary_insert(list, item):
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = (low + high) //2
        guess = list[mid][0]
        if equal(guess,item):
            list[mid][1] += 1
            return None
        if bigger(guess, item):
            high = mid -1
        else:
            low = mid + 1
    mid = (low + high) //2
    if len(list) > 0:
        if mid < len(list):
            if item > list[mid][0]:
                mid += 1
    list.insert(mid, [item, 1])


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

from collections import deque
ab = deque(ab)
ba = deque(ba)
ans = 1 #all pattern
pair = []
a = [-1, 0]
b = [-1, 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)


