import sys
from collections import defaultdict as dd
from math import gcd
input = sys.stdin.readline
N = int(input())
mod = 10 ** 9 + 7
d = dd(int)
a = [tuple(map(int, input().split())) for _ in range(N)]
table = [0] * N
table[1] = pow(2, N - 2, mod)
for x in range(2, N):
  table[x] = table[x - 1] * 2 % mod - pow(2, N - x - 1, mod)
for x, y in a:
  g = gcd(abs(x), abs(y))
  d[(x // g, y // g)] += 1
res = 1
u = 0
itr = list(d.keys())
#print(itr)
for x, y in itr:
  t = d[(y, -x)] + d[(-y, x)]
  if t == 0: u += d[(x, y)]
for x, y in itr:
  t = d[(y, -x)] + d[(-y, x)]
  if t:
    v = 0
    v += pow(2, d[(x, y)], mod) - 1
    v %= mod
    v += pow(2, t, mod) - 1
    v %= mod
    v += 1
    v %= mod
    res *= v
    res %= mod
    #print(res, v)
  d[(x, y)] = 0
print(res * pow(2, u, mod) - 1 % mod)