#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int N = 2e5 + 5;
int n;
long long a, b, res;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long power(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) {
      res = (res * a) % MOD;
    }
    a = a * a % MOD;
    b >>= 1;
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  unordered_map<string, pair<int, int> > ma;
  long long z = 0;
  long long az = 0;
  long long bz = 0;
  for (int i = 0; i < n; ++i) {
    cin >> a >> b;
    if (!a && !b) {
      ++z;
      continue;
    } else if (a == 0) {
      ++az;
      continue;
    } else if (b == 0) {
      ++bz;
      continue;
    }
    bool neg = (a < 0) ^ (b < 0);
    a = abs(a);
    b = abs(b);
    long long c = gcd(a, b);
    a /= c;
    b /= c;
    if (neg) {
      string k = to_string(b) + ',' + to_string(a);
      ++ma[k].first;
    } else {
      string k = to_string(a) + ',' + to_string(b);
      ++ma[k].second;
    }
  }
  res = (power(2, az) % MOD + power(2, bz) - 1) % MOD;
  for (auto p : ma) {
    long long c1 = p.second.first, c2 = p.second.second;
    res = (res * (power(2, c1) % MOD + power(2, c2) - 1)) % MOD;
  }
  res = (res + z - 1) % MOD;
  cout << res << endl;
  return 0;
}
