#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7,N=200005;
long long a[N],b[N],pwr[N],ans,g,k,n,f1,f2;
map<pair<long long,long long> ,int > fix;
int main(){
	cin>>n;
	pwr[0]=1;
	for(k=1;k<=n;k++){
		cin>>a[k]>>b[k];
		pwr[k]=(pwr[k-1]*2)%mod;
		if(a[k]!=0 && b[k]!=0){
		g=__gcd(abs(a[k]),abs(b[k])); 
		a[k]/=g;
		b[k]/=g;}
		if(a[k]==0 && b[k]!=0 ) f1++;
		else if(a[k]!=0 && b[k]==0 ) f2++;
		fix[{a[k],b[k]}]++;
	}
	ans=1;
	for(k=1;k<=n;k++){
		 
		if(fix[{a[k],b[k]}]!=0){
			if(a[k]==0 ||  b[k]==0) {}
			else{
			
			 ans*=(pwr[fix[{a[k],b[k]}]]-1+pwr[fix[{b[k],-a[k]}]]+pwr[fix[{-b[k],a[k]}]]-2)%mod+1;
			ans%=mod;
			fix[{a[k],b[k]}]=fix[{-b[k],a[k]}]=fix[{b[k],-a[k]}]=0;
		}}
			}
			ans*=(pwr[f1]-1+pwr[f2]-1)+1;ans%=mod; 
			ans+=mod-1; ans%=mod;
			ans+=fix[{0,0}]; ans%=mod;
			cout<<ans<<endl;
}