#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pi pair<int,int>
#define ff first
#define ss second
#define boost ios::sync_with_stdio(false);cin.tie(nullptr)
#include "string"
#define int long long

const int M = 1e9 + 7;

int mod(int n){
	n %= M;
	return (n + M) % M;
}

int power(int a,int b){
	int ans = 1;
	while(b>0){
		if(b&1)
			ans = mod(ans * a);
		a = mod(a * a);
		b /= 2;
	}
	return ans;
}

pi get(pi a){
	if(a.ff == 0 && a.ss == 0)
		return {0,0};
	if(a.ff == 0)
		a.ss = 1;
	if(a.ss == 0)
		a.ff = 1;
	if(a.ss<0) {
		a.ff *= -1;
		a.ss *= -1;
	}
	int g = __gcd(a.ff,a.ss);
	a.ff /= g;
	a.ss /= g;
	return a;
}

pi rev(pi a) {
	if(a.ff == 0 && a.ss == 0)
		return a;
	a.ff *= -1;
	if(a.ff < 0){
		a.ff *= -1;
		a.ss *= -1;
	}
	if(a.ff == 0)
		a.ss = 1;
	if(a.ss == 0)
		a.ff = 1;
	return {a.ss,a.ff};
}

int32_t main(){
   boost;
   int n;
   cin>>n;
   pi a[n];
   map<pi,int>mp;
   for(int i=0;i<n;i++){
   	cin>>a[i].ff>>a[i].ss;
   	a[i] = get(a[i]);
   	mp[a[i]]++;
   }
   
   int ans = 1;
   for( auto & p:mp){
   	if(mp[p.ff] == -1)
   		continue;
   	if(p.ff == make_pair(0ll,0ll))
   		continue;
   	pi p1 = rev(p.ff);
   	if(mp.count(p1)){
   		int tt = mod( power(2,p.ss) + power(2,mp[p1]) - 1);
   		ans = mod(ans * tt);
   		mp[p1] = -1;
   	}
   	else
   		ans = mod(ans*power(2,p.ss));
   }
   ans = mod(ans  + mp[{0,0}] - 1);
   cout<<ans<<endl;
}