#include <bits/stdc++.h>
using namespace std;
long long ni(long long a) {
  if (a == 0)
    return 1;
  else if (a % 2 == 0)
    return ((ni(a / 2) % 1000000007) * (ni(a / 2) % 1000000007) % 1000000007);
  else
    return ((ni(a - 1) % 1000000007) * 2 % 1000000007);
}
int main() {
  long long n;
  cin >> n;
  long long ans = ni(n) - 1;
  map<double, int> p;
  map<double, int> visited;
  map<double, int> pas;
  vector<pair<double, double> > iwashi(n);
  for (int i = 0; i < n; i++) {
    cin >> iwashi[i].first >> iwashi[i].second;
    double f = (double)(iwashi[i].second / iwashi[i].first);
    iwashi[i].second = f;
    p[f]++;
  }
  for (int i = 0; i < n; i++) {
    double aim = -(double)1 / iwashi[i].second;
    visited[aim]++;
    if (pas[aim]) continue;
    pas[iwashi[i].second]++;
    int num = p[aim];
    if (num) {
      for (int i = 0; i < num; i++) {
        ans -= ni(n - 1 - i - visited[aim]);
        ans %= 1000000007;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
