#include <bits/stdc++.h>
using namespace std;
long long modpow(long long a, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % (int)(1e9 + 7);
    a = a * a % (int)(1e9 + 7);
    n >>= 1;
  }
  return res;
}
int main() {
  int n;
  cin >> n;
  map<double, long long> m;
  for (int i = 0; i < (int)(n); i++) {
    long long a, b;
    cin >> a >> b;
    double c = (double)a / b;
    m[c]++;
  }
  map<long long, long long> mn;
  long long cnttmp = 0;
  for (auto cc : m) {
    long long cnt = 0;
    double tmp = cc.first;
    int tmpn = m[-(double)1 / tmp];
    if (tmpn >= 1) {
      cnt = cc.second * tmpn;
    }
    if (cnt > 0) mn[cnt]++;
  }
  for (auto mi : mn) {
    mi.second = mi.second / 2;
    cnttmp += mi.first * mi.second;
  }
  long long cnt2 = cnttmp * cnttmp;
  for (auto mi : mn) {
    cnt2 -= mi.first * mi.first * mi.second;
  }
  long long ans = 0;
  ans += modpow(2, n);
  ans -= modpow(2, n - 2) * cnttmp;
  ans += modpow(2, n - 4) * cnt2;
  if (cnttmp % 2 == 0) {
    ans += modpow(2, 0);
  } else {
    ans -= modpow(2, 0);
  }
  ans -= 1;
  ans = (ans + (int)(1e9 + 7) * 2) % (int)(1e9 + 7);
  cout << ans << endl;
  return 0;
}
