output_description: Print the count modulo 1000000007.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      A_1 B_1
      :
      A_N B_N
attempt: import sys
  
  sys.setrecursionlimit(2147483647)
  
  
  n = int(input())
  
  mod = 10**9 + 7
  
  pp = {}
  pp_k = set([])
  
  pm = {}
  pm_k = set([])
  
  from fractions import gcd
  
  
  for _ in range(n):
      a, b = map(int, input().split())
      tmp = gcd(a, b)
      a = a // tmp
      b = b // tmp
  
      if a * b > 0:
          if (a, b) in pp_k:
              pp[(a, b)] += 1
          else:
              pp[(a, b)] = 1
              pp_k.add((a, b))
      else:
          if (a, b) in pm_k:
              pm[(a, b)] += 1
          else:
              pm[(a, b)] = 1
              pm_k.add((a, b))
  
  result = pow(2, n, mod) - 1
  
  
  def cmb(n, r, p):
      if (r < 0) or (n < r):
          return 0
      r = min(r, n - r)
      return fact[n] * factinv[r] * factinv[n - r] % p
  
  
  p = mod  # 割る数
  N = 10**6  # N は必要分だけ用意する
  fact = [1, 1]  # fact[n] = (n! mod p)
  factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
  inv = [0, 1]  # factinv 計算用
  for i in range(2, N + 1):
      fact.append((fact[-1] * i) % p)
      inv.append((-inv[p % i] * (p // i)) % p)
      factinv.append((factinv[-1] * inv[-1]) % p)
  
  # print(pp_k,pm_k)
  for item in pp_k:
  
      tmp = 0
  
      a, b = item[0], item[1]
      cnt_pp = pp[item]
      aa = -1 * a
      bb = b
      cnt_pm = 0
      hoge = (bb, aa)
      # print(hoge)
      if hoge in pm_k:
          # print("Yes")
          cnt_pm += pm[hoge]
      aa = a
      bb = -1 * b
      hoge = (bb, aa)
      if hoge in pm_k:
          cnt_pm += pm[hoge]
      # print(item,cnt_pm)
      if cnt_pm > 0:
          tmp += (
              pow(2, max(0, n - cnt_pm - cnt_pp), mod)
              * (pow(2, cnt_pp, mod) - 1)
              * (pow(2, cnt_pp, mod) - 1)
          )
          # print(pow(2,max(0,n-cnt_pm-cnt_pp),mod),(pow(2,cnt_pp,mod)-1),(pow(2,cnt_pp,mod)-1))
          result -= tmp
  
  print(result % mod)
  
problem_description: Statement
  
  We have caught N sardines. The _deliciousness_ and _fragrantness_ of the i-th
  sardine is A_i and B_i, respectively.
  
  We will choose one or more of these sardines and put them into a cooler.
  However, two sardines on bad terms cannot be chosen at the same time.
  
  The i-th and j-th sardines (i \neq j) are on bad terms if and only if A_i
  \cdot A_j + B_i \cdot B_j = 0.
  
  In how many ways can we choose the set of sardines to put into the cooler?
  Since the count can be enormous, print it modulo 1000000007.
samples: [{"input": "3\n    1 2\n    -1 1\n    2 -1", "output": "5\n    \n\nThere are five ways to choose the set of sardines, as follows:\n\n  * The 1-st\n  * The 1-st and 2-nd\n  * The 2-nd\n  * The 2-nd and 3-rd\n  * The 3-rd\n\n* * *"}, {"input": "10\n    3 2\n    3 2\n    -1 1\n    2 -1\n    -3 -9\n    -8 12\n    7 7\n    8 1\n    8 2\n    8 4", "output": "479"}]