#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define rep(i,n) for(int i = 0; i < (n); i++)
#define rrep(i,n) for(int i = (n-1); i >= 0; i--)
#define all(n) n.begin(), n.end()
#define print(n) cout << n << endl
ll MOD = 1e9+7;

ll modpow(ll a, ll n, ll MOD){
    ll res = 1;
    while(n > 0){
        if(n & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        n >>= 1;
    }
    return res;
}

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    
    int n;
    cin >> n;
    ll a,b,c,zero=0,azero=0,bzero=0;
    map<pair<ll,ll>,vector<int>> g;
    rep(i,n){
        cin >> a >> b;
        if(a==0 && b == 0){
            zero++;
        }
        else if(a==0 || b ==0){
            if(a==0) azero++;
            else bzero++;
        }
        else{
            c = __gcd(abs(a),abs(b));
            a /= c;
            b /= c;
            pair<ll,ll> p(a,b),pp(-b,a),ppp(-a,-b),pppp(b,-a);
            if(g.count(p)) g[p][0]++;
            else if(g.count(pp)) g[pp][3]++;
            else if(g.count(ppp)) g[ppp][2]++;
            else if(g.count(pppp)) g[pppp][1]++;
            else g[p] = {1,0,0,0};
        }
    }
    ll ans, sum;
    ans = ((modpow(2,azero,MOD)-1) + (modpow(2,bzero,MOD)-1) + 1) % MOD;
    vector<int> cnt;
    for(auto p:g){
        cnt = p.second;
        sum = 1;
        rep(i,4) sum = (sum + modpow(2,cnt[i],MOD)-1) % MOD;
        rep(i,2) sum = (sum + (modpow(2,cnt[i],MOD)-1) * (modpow(2,cnt[i+2],MOD)-1) % MOD) % MOD;
        ans = ans * sum % MOD;
    }
    print(ans-1+zero);
    return 0;
}