#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
 #define PI 3.141592653
using namespace std;



ll modexp(ll n, ll p){
	if(p ==0) return 1;

	ll ans = modexp(n, p/2);
	ans = (ans*ans)%MOD;
	if(p%2) return (n*ans)%MOD;
	else return ans;
}


pair<ll,ll> reduce(ll a,ll b){
	if(b == 0) return {1,0};
	if(a ==0 ) return {0,1};
	if(b<0){
		a= -a;
		b = -b;
	}
	ll g = __gcd(abs(a),abs(b));

	return {a/g,b/g};
}


void solve(){
	map<pair<ll,ll>, int> mp;
	vector<pair<ll,ll> > v;
	int n; cin>>n;
	int ans=0;
	for(int i=0; i<n; i++){
		ll a,b;
		cin>>a>>b;
		
		if(a == 0 && b == 0){
			ans++;
			continue;
		}
		if(mp[reduce(a,b)] ==0){
			if(mp[reduce(-b,a)] == 0){
				v.pb(reduce(a,b));
			}
		}
		mp[reduce(a,b)]++;
		//cout<<reduce(a,b).f<<" fucks "<<reduce(a,b).s<<" in "<<mp[reduce(a,b)]<<"\n";
	}
	ll f =0;
	for(auto pp: v){
	//	cout<<pp.f<<" "<<pp.s<<" "<<mp[{pp.f,pp.s}]<<"\n";
	//	cout<<-pp.s<<" "<<pp.f<<" "<<mp[{-pp.s,pp.f}]<<"\n";
		int s = pp.f/(abs(pp.f));
		f = (f+ ((modexp(2,mp[{pp.f,pp.s}])-1)*(f+1))%MOD  + ((modexp(2,mp[reduce(-pp.s,s*pp.f)])-1)*(f+1))%MOD)%MOD;
	}
	cout<<(f+ans)%MOD;

}


int main()
{ 
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout<<fixed<<setprecision(12);
	int t =1; //cin>>t;
	for(int i=1; i<=t; i++){
		solve();
		cout<<"\n";
	}
	return 0;

}
