#include <bits/stdc++.h>
#define rep(i,n) for(int i=0; i<(int)(n); i++)

using namespace std;
typedef long long LL;
typedef pair<LL,LL> P;
const LL mod=1e9+7;

LL modpow(LL x, LL n){
	LL r=1;
	while(n){
		if(n&1) r=r*x%mod;
		x=x*x%mod;
		n>>=1;
	}
	return r;
}

int main(){
	int N;
	cin >> N;
	LL zero=0;
	vector<int> A, B;
	rep(i,N){
		LL a, b;
		cin >> a >> b;
		if(a==0 && b==0){
			zero++;
			continue;
		}
		A.emplace_back(a);
		B.emplace_back(b);
	}
	N=A.size();
	LL a_zero=0, b_zero=0;
	rep(i,N){
		if(A[i]==0) a_zero++;
		if(B[i]==0) b_zero++;
	}
	map<P,LL> m;
	rep(i,N){
		LL a=A[i], b=B[i];
		if(a==0 || b==0) continue;
		LL div=__gcd(a,b);
		a/=div, b/=div;
		if(a<0) a*=-1, b*=-1;
		P p=P(a,b);
		m[p]++;
	}
	LL ans=zero, res=1;
	for(auto itr:m){
		LL n1=itr.second;
		if(!n1) continue;
		LL a=itr.first.first, b=itr.first.second;
		P p;
		if(b>0) p=P(b,-a);
		else p=P(-b,a);
		LL n2=m[p];
		if(n2 && b<0) continue;
		res*=modpow(2,n1)+modpow(2,n2)-1;
		res%=mod;
	}
	res*=modpow(2,a_zero)+modpow(2,b_zero)-1;
	res%=mod;
	ans+=res-1, ans%=mod;
	cout << ans << endl;

	return 0;
}