#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<ll,ll>P;

const int MOD=1000000007;
const int INF=0x3f3f3f3f;
const ll INFL=0x3f3f3f3f3f3f3f3f;

ll ppow(ll a,ll b){
	a%=MOD;
	ll res=1;
	while(b){
		if(b&1)res=(res*a)%MOD;
		a=(a*a)%MOD;
		b>>=1;
	}
	return res;
}
int main(){
	int n;cin>>n;
	map<P,int>mp;
	rep(i,n){
		ll a,b;cin>>a>>b;
		if(a<0){
			a=-a;b=-b;
		}
		ll g=gcd(a,abs(b));
		a/=g;b/=g;
		mp[{a,b}]++;
	}
	set<P>used;
	ll ans=1;
	for(auto p:mp){
		if(used.count(p.first))continue;
		P q=P(p.first.second,-p.first.first);
		if(p.first.second<0){
			q=P(-p.first.second,p.first.first);
		}
		if(!mp.count(q)){
			(ans*=ppow(2,p.second))%=MOD;
			continue;
		}
		(ans*=(ppow(2,p.second)+ppow(2,mp[q])+MOD-1)%MOD)%=MOD;
		used.insert(q);
	}
	cout<<(ans+MOD-1)%MOD<<endl;
}