require 'set'; require 'prime'; require 'pp'
INF=Float::INFINITY; MOD=10**9+7
n = gets.chomp.to_i
h = Hash.new(0)
mu = 0
n.times do
  a,b = gets.chomp.split.map(&:to_i)
  if a == 0 && b == 0
    mu += 1
  elsif a == 0
    h[[0,1]] += 1
  elsif b == 0
    h[[-1,0]] += 1
  else
    r = Rational(a,b)
    num = r.numerator
    den = r.denominator
    h[[num,den]] += 1
  end
end

# p h
pairs = []

h.each do |k, v|
  num, den = k
  next if num != den && num.abs <= den
  key = num < 0 ? [den, -num] : [-den, num]
  if h.has_key? key
    # p [[num,den], key]
    pairs.push [v, h[key]]
  end
end

remaining = n - mu - pairs.map(&:sum).sum

# p '--'
# p pairs
# p remaining

ans = 1

pairs.each do |x,y|
  xx = (1 << x) % MOD
  yy = (1 << y) % MOD
  tmp = xx + yy - 1
  ans = ans * tmp % MOD
end

ans = ans * (1 << remaining) - 1 % MOD
ans = (ans + MOD) % MOD
puts ans