#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
const long long mod = 1000000007;
long long pw[200200] = {1};
int main() {
  map<pair<long long, long long>, pair<int, int> > chk;
  for (int i = 1; i < 200200; i++) pw[i] = (pw[i - 1] * 2) % mod;
  long long a = -1;
  int n;
  cin >> n;
  while (n--) {
    long long x, y;
    cin >> x >> y;
    if (x == 0 && y == 0) {
      a++;
      continue;
    }
    if (make_pair(x, y) < make_pair(0ll, 0ll)) x = -x, y = -y;
    long long g = gcd(abs(x), abs(y));
    x /= g;
    y /= g;
    if (y > 0)
      chk[{x, y}].first++;
    else
      chk[{-y, x}].second++;
  }
  long long r = 1;
  for (auto& p : chk) {
    r = r * (pw[p.second.first] + pw[p.second.second] - 1) % mod;
  }
  printf("%lld\n", (a + r) % mod);
  return 0;
}
