#include <bits/stdc++.h>
using namespace std;

long long int MOD = 1000000007;

long long int modpow(long long int a, long long int n) {
  long long int res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % MOD;
    a = a * a % MOD;
    n >>= 1;
  }
  return res;
}

int main() {
  int N;
  cin >> N;
  long long int C = 0;
  map<pair<long long int, long long int>, long long int> M;
  for (int i = 0; i < N; i++) {
    long long int A, B;
    cin >> A >> B;
    if (A == 0 && B == 0) {
      C++;
      continue;
    }
    else if (A == 0) B = 1;
    else if (B == 0) A = 1;
    else {
      if (A < 0) {
        A *= -1;
        B *= -1;
      }
      long long int G = __gcd(abs(A), abs(B));
      A /= G;
      B /= G;
    }
    pair<long long int, long long int> P = make_pair(A, B);
    if (M.count(P)) M.at(P)++;
    else M[P] = 1;
  }
  long long int ans = 1;
  for (auto P : M) {
    long long int X = P.first.first, Y = P.first.second;
    pair<long long int, long long int> Q;
    if (Y > 0) Q = make_pair(Y, -X);
    else Q = make_pair(-Y, X);
    if (M.count(Q)) ans *= (modpow((long long int)2, M[P.first]) + modpow((long long int)2, M[Q]) - 1) % MOD;
    else ans *= modpow((long long int)2, M[P.first]);
    ans %= MOD;
    M.erase(P.first);
    if (M.count(Q)) M.erase(Q);
  }
  cout << (ans + C - 1) % MOD << endl;
}
