#include <bits/stdc++.h>
using namespace std;
long long pow(long long a, long long b, long long mod) {
  if (b == 0) {
    return 1;
  } else {
    if (b % 2 == 0) {
      return pow(a * a % mod, b / 2, mod);
    } else {
      return pow(a * a % mod, b / 2, mod) * a % mod;
    }
  }
}
long long gcd(long long a, long long b) {
  long long r = a % b;
  while (r != 0) {
    a = b;
    b = r;
    r = a % b;
  }
  return b;
}
int main() {
  int N;
  cin >> N;
  long long a, b, g;
  long long mod = 1000000007;
  map<pair<long long, long long>, pair<int, int>> m;
  int z = 0;
  for (int i = 0; i < N; i++) {
    cin >> a >> b;
    if (a == 0 && b == 0) {
      z++;
    } else if (a > 0 && b > 0) {
      g = gcd(a, b);
      m[{a / g, b / g}].first++;
    } else if (a > 0) {
      g = gcd(a, -b);
      m[{-b / g, a / g}].second++;
    } else if (b > 0) {
      g = gcd(-a, b);
      m[{b / g, -a / g}].second++;
    } else {
      g = gcd(-a, -b);
      m[{-a / g, -b / g}].first++;
    }
  }
  long long ans = 1;
  long long tmp;
  for (auto p : m) {
    tmp = pow(2, p.second.first, mod);
    tmp += pow(2, p.second.second, mod);
    tmp--;
    tmp %= mod;
    ans *= tmp;
    ans %= mod;
  }
  ans--;
  ans += mod;
  ans %= mod;
  ans += z;
  ans %= mod;
  cout << ans << endl;
  return 0;
}
