#include<bits/stdc++.h>

using namespace std;

const int mod = 1000000007;

constexpr long long power(long long b, long long e, long long mod){
  long long ret = 1;
  while(e){
    if(e & 1){
      ret *= b;
      ret %= mod;
    }

    b *= b;
    b %= mod;
    e >>= 1;
  }

  return ret;
}

constexpr long long power(long long b, long long e){
  return power(b, e, mod);
}

int main(){
  int N;
  cin >> N;
  
  vector<pair<long long, long long>> iwashi(N);
  map<pair<long long, long long>, int> m;
  for(int i = 0; i < N; i++){
    cin >> iwashi[i].first >> iwashi[i].second;
    long long g = gcd(iwashi[i].first, iwashi[i].second);
    iwashi[i].first /= g;
    iwashi[i].second /= g;
    
    if(iwashi[i].first < 0){
      iwashi[i].first = -iwashi[i].first;
      iwashi[i].second = -iwashi[i].second;
    }
    
    ++m[iwashi[i]];
  }
  
  long long box = 1;
  
  for(auto[p, c] : m){
    long long a = p.first, b = p.second;
    long long t;
    if(b < 0){
      a = -a;
      b = -b;
      t = m.count(make_pair(b, -a));
      if(t > 0) continue;
    }else{
      t = m.count(make_pair(b, -a));
    }
    
    box *= power(2, c) + power(2, t) - 1;
    box %= mod;
  }
  
  box -= 1;
  box %= mod;
  if(box < 0) box += mod;
  cout << box << endl;
  
  return 0;
}