#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long pow_kai(long long a, long long n) {
  long long x = 1;
  while (n > 0) {
    if (n & 1) {
      x = x * a;
      x %= mod;
    }
    a = a * a;
    a %= mod;
    n >>= 1;
  }
  return x;
}
long long gcd(long long A, long long B) {
  A = abs(A);
  B = abs(B);
  if (A > B) {
    swap(A, B);
  }
  if (B % A == 0) {
    return A;
  }
  return gcd(A, B % A);
}
int main() {
  long long N, FF;
  cin >> N;
  vector<long long> A(N), B(N);
  long long allzero = 0;
  long long rzero = 0;
  long long lzero = 0;
  long long mi = 0;
  long long pl = 0;
  long long ans = 1;
  for (int i = 0; i < N; i++) {
    cin >> A[i] >> B[i];
    if (A[i] == 0 && B[i] == 0) {
      allzero++;
      continue;
    }
    if (A[i] == 0) {
      lzero++;
      continue;
    }
    if (B[i] == 0) {
      rzero++;
      continue;
    }
    FF = gcd(A[i], B[i]);
    if (A[i] < 0) {
      FF *= -1;
    }
    A[i] /= FF;
    B[i] /= FF;
    if (B[i] < 0) {
      mi++;
    } else {
      pl++;
    }
  }
  vector<vector<long long>> AB(N, vector<long long>(2, 0));
  for (int i = 0; i < N; i++) {
    AB[i][0] = A[i];
    AB[i][1] = B[i];
    if (AB[i][1] < 0) {
      AB[i][2] = 99;
      swap(AB[i][0], AB[i][1]);
      AB[i][0] *= -1;
    }
  }
  sort(AB.begin(), AB.end());
  vector<vector<long long>> daa(pl + mi, vector<long long>(4));
  long long aaaa = pl + mi;
  long long anow = 0;
  for (int i = 0; i < N; i++) {
    if (AB[i][0] == 0 || AB[i][1] == 0) continue;
    if (AB[i][2] == 99) {
      if (anow != 0) {
        if (AB[i][0] == daa[anow - 1][0] && AB[i][1] == daa[anow - 1][1]) {
          daa[anow - 1][3]++;
          aaaa--;
          continue;
        }
      }
      daa[anow][0] = AB[i][0];
      daa[anow][1] = AB[i][1];
      daa[anow][3] = 1;
      anow++;
    } else {
      if (anow != 0) {
        if (AB[i][0] == daa[anow - 1][0] && AB[i][1] == daa[anow - 1][1]) {
          daa[anow - 1][2]++;
          aaaa--;
          continue;
        }
      }
      daa[anow][0] = AB[i][0];
      daa[anow][1] = AB[i][1];
      daa[anow][2] = 1;
      anow++;
    }
  }
  for (int i = 0; i < aaaa; i++) {
    for (int j = 0; j < 4; j++) {
      cerr << daa[i][j] << " ";
    }
    cerr << endl;
  }
  long long bai;
  bai = pow_kai(2, lzero);
  bai += pow_kai(2, rzero);
  bai--;
  bai %= mod;
  ans *= bai;
  ans %= mod;
  cerr << ans << endl;
  for (int i = 0; i < aaaa; i++) {
    bai = pow_kai(2, daa[i][2]);
    bai += pow_kai(2, daa[i][3]);
    bai--;
    bai %= mod;
    ans *= bai;
    ans %= mod;
  }
  ans += allzero;
  ans %= mod;
  cout << ans - 1 << endl;
}
