#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for(int i = a; i < b; i ++)
#define FORS(i, a, b, c) for(int i = a; i < b; i += c)
#define FORN(i, a, b) for(int i = a; i <= b; i ++)
#define FORD(i, a, b) for(int i = a-1; i >= b; i --)
#define FORE(i, b) for(auto &i:b)
#define REP(i, b) FOR(i, 0, b)
#define REPN(i, b) FORN(i, 0, b)
#define SQ(i) (i*i)
#define ALL(a) a.begin(), a.end()
#define ALLA(a,n) a, a+n
#define SORT(a) sort(ALL(a))
#define SORTA(a, n) sort(ALLA(a, n))
#define REV(a) reverse(ALL(a))
#define REVA(a, n) reverse(ALLA(a, n))
#define MAX(a, b) a = max(a, b)
#define MIN(a, b) a = min(a, b)
#define IN(a, b) (a.find(b) != a.end())
#define BACK(a) a.back(); a.RB()
#define QBACK(a) a.top(); a.pop()
#define PRINT(a) FORE(i, a) cout << i << " "; cout << endl

#define PB  push_back
#define RB  pop_back
#define RF  pop_front
#define INS insert
#define F   first
#define S   second
#define UM  unordered_map
#define US  unordered_set
#define PQ  priority_queue

#define IO ios_base::sync_with_stdio(false); cin.tie(NULL)

typedef long long ll;
typedef unsigned long long ull;

typedef vector<int> vi;
typedef vector<double> vd;
typedef vector<ll> vll;
typedef pair<int,int> pi;
typedef pair<double,double> pd;
typedef pair<ll,ll> pll;
typedef queue<int> qi;
typedef queue<double> qd;
typedef queue<ll> qll;
typedef US<int> si;
typedef US<double> sd;
typedef US<ll> sll;
typedef vector<vi> mi;
typedef vector<vd> md;
typedef vector<vll> mll;
typedef vector<pi> vpi;
typedef vector<pd> vpd;
typedef vector<pll> vpll;

const ll mod = 1e9+7;
ll pow(ll b, ll p){
  ll r = 1;
  while(p){
    if(p&1)r=r*b%mod;
    p>>=1; b=b*b%mod;
  }
  return r;
}
ll rev(ll a, ll b){
  return a*pow(b,mod-2)%mod;
}

int main(){
  IO; int N; cin >> N;
  map<pll, ll> freq;
  set<pll> vis;
  ll a, b;
  ll ans = 1;
  while(N--){
    cin >> a >> b;
    if(!a&&!b){
      ans ++;
      continue;
    }
    if(!a) b = 1;
    else if(!b) a = 1;
    else{ // b always +
      if(b<0)a*=-1,b*=-1;
      ll c = __gcd(a, b);
      a /= c, b /= c;
    }
    freq[{a,b}]++;
  }
  FORE(i,freq){
    if(IN(vis,i.F)) continue;
    vis.INS(i.F);
    ll a = i.F.F, b = i.F.S;
    pll t = (a<0?make_pair(b,-a):make_pair(-b,a));
    if(IN(freq,t)){
      vis.INS(t);
      ans=(pow(2ll,i.S)+pow(2ll,freq[t])-1)%mod*ans%mod;
    }else ans = ans*pow(2ll, i.S)%mod;
  }
  cout << ans-1 << endl;
}
