MOD = 10 ** 9 + 7
def pow(n, k)
  k %= (MOD - 1)
  return 1 if k.zero?
  return pow(n, k - 1) * n % MOD if k.odd?
  return (pow(n, k / 2) ** 2) % MOD
end
def max(a,b); a > b ? a : b; end
  
N = gets.to_i
ab0 = 0
a0 = 0
b0 = 0
dp = Hash.new(0)

N.times.each do
  a,b = gets.split.map(&:to_i)
  if a.zero? && b.zero?
    ab0 += 1
  elsif a.zero?
    a0 += 1
  elsif b.zero?
    b0 += 1
  else
    dp[a.to_r / b] += 1
  end
end

used = {}

ans = 1
sec = 0

if a0.zero? || b0.zero?
  ans = ans * pow(2, max(a0, b0)) % MOD
else
  ans = ans * (ans + pow(2, a0) + pow(2,b0) - 1) % MOD
end

dp.keys.each do |k|
  next if used[k]
  used[k] = true
  if dp[-1/k] > 0
    ans = ans * (pow(2, dp[k]) + pow(2, dp[-1/k]) - 1) % MOD
    used[-1/k] = true
  else
    ans = ans * pow(2, dp[k]) % MOD
  end
end
puts (ans + ab0 - 1) % MOD 
