#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1000000007;
long long int gcd(long long int A, long long int B) {
  A = A < 0 ? -A : A;
  B = B < 0 ? -B : B;
  while (A != 0) {
    long long int C = B % A;
    B = A;
    A = C;
  }
  return B;
}
long long int powMod(long long int A) {
  A = A % (mod - 1);
  if (A == 0)
    return 1;
  else if (A == 1)
    return 2;
  else
    return (powMod(A / 2) * powMod((A + 1) / 2)) % mod;
}
void reduce(long long int &A, long long int &B) {
  long long int D = gcd(A, B);
  A /= D;
  B /= D;
}
int main() {
  map<pair<long long int, long long int>, long long int> fish;
  long long int A, B, N;
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> A >> B;
    if (A == 0 && B == 0)
      fish[pair<long long int, long long int>(0, 0)]++;
    else {
      if (A < 0) {
        A = -A;
        B = -B;
      } else if (A == 0 && B < 0)
        B = -B;
      reduce(A, B);
      fish[pair<long long int, long long int>(A, B)]++;
    }
  }
  long long int resultado = 1;
  for (map<pair<long long int, long long int>, long long int>::iterator it =
           fish.begin();
       it != fish.end(); ++it) {
    long long int A = (it->first).first;
    long long int B = (it->first).second;
    if (A == 0 && B == 0) continue;
    long long int K = powMod(fish[pair<long long int, long long int>(A, B)]);
    if (B == 0) {
      K = (K + powMod(fish[pair<long long int, long long int>(B, A)]) - 1) %
          mod;
      fish[pair<long long int, long long int>(A, B)] = 0;
      fish[pair<long long int, long long int>(B, A)] = 0;
    } else if (B > 0) {
      K = (K + powMod(fish[pair<long long int, long long int>(B, -A)]) - 1) %
          mod;
      fish[pair<long long int, long long int>(A, B)] = 0;
      fish[pair<long long int, long long int>(B, -A)] = 0;
    } else {
      K = (K + powMod(fish[pair<long long int, long long int>(-B, A)]) - 1) %
          mod;
      fish[pair<long long int, long long int>(A, B)] = 0;
      fish[pair<long long int, long long int>(-B, A)] = 0;
    }
    resultado = (resultado * K) % mod;
  }
  resultado =
      (resultado + (fish[pair<long long int, long long int>(0, 0)] - 1) % mod) %
      mod;
  cout << resultado;
  return 0;
}
