#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
ll gcd(ll a, ll b) {
  if (a % b == 0)
    return b;
  else {
    return gcd(b, a % b);
  }
}
ll modpow(ll n, ll m = 1000000007 - 2) {
  ll r = 1;
  while (m)
    r = r * ((m % 2) ? n : 1) % 1000000007, n = n * n % 1000000007, m >>= 1;
  return r;
}
int main() {
  int n;
  cin >> n;
  map<P, P> mp;
  long long zero = 0;
  ll sum = 1;
  for (int i = 0; i < n; i++) {
    ll a, b;
    cin >> a >> b;
    if (a == 0 && b == 0)
      zero++;
    else if (a == 0) {
      mp[make_pair(1, 0)].first++;
    } else if (b == 0) {
      mp[make_pair(1, 0)].second++;
    } else {
      ll g = gcd(a, b);
      a = a / g;
      b = b / g;
      if (mp[make_pair(b, -a)].first > 0)
        mp[make_pair(b, -a)].second++;
      else if (mp[make_pair(-b, a)].first > 0)
        mp[make_pair(-b, a)].second++;
      else
        mp[make_pair(a, b)].first++;
    }
  }
  for (auto p : mp) {
    ll s = p.second.first % 1000000007;
    ll t = p.second.second % 1000000007;
    ll now = 1;
    now += modpow(2, s) - 1;
    now += modpow(2, t) - 1;
    sum *= now % 1000000007;
    sum = sum % 1000000007;
  }
  sum += zero;
  sum = sum % 1000000007;
  if (sum < 0)
    cout << 1000000007 - sum - 1 << endl;
  else
    cout << sum - 1 << endl;
}
