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

#define int long long int
#define ff first
#define ss second
#define pb push_back
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

const int mod = 1e9 + 7;
const int N = 5e5 + 5;
const int inf = 1e16 + 2;
double pi = acos(-1);
int pw(int x , int y) {
    int res = 1;
    while(y > 0) {
        if(y & 1) res = (res * x) % mod;
        y >>= 1;
        x = (x * x) % mod;
    }
    return res;
}

pair<int , int> get(int a , int b) {
    while(gcd(a , b) > 1) {
        int g = gcd(a ,b);
        a /= g;
        b /= g;
    }
    return {a , b};
}
void solve(int z) {
    int n;
    cin >> n;
    vector<pair<int , int>> v;
    map<pair<int , int> , int> m;
    for(int i = 0 ; i < n ; i ++) {
        double a , b;
        cin >> a >> b;
        pair<int , int > tm = get(abs(a) , abs(b));
        if(a < 0) tm.ff = -tm.ff;
        if(b < 0) tm.ss = -tm.ss;
        v.pb({tm.ff , tm.ss});
        m[{tm.ff , tm.ss}] ++;
        //cout << tm.ff << ' ' << tm.ss << '\n';
    }
    
    
    int ans = 0;
    for(int i = 0 ;  i < n ; i ++) {
        m[{v[i].ff , v[i].ss}] --;
        
        int y = m[{-v[i].ss , v[i].ff}];
        y += m[{v[i].ss , -v[i].ff}];
        //cout << y << ' ';
        int u = y;
        y = (n - i - 1) - y;
        //cout << y << ' ';
        //cout << pw(2 , y) << ' ';
        if(i > 0)ans = (ans + pw(2 , y - u) + mod) % mod;
        else {
            //cout << u << ' ';
            ans = (ans + pw(2 , y) + mod) % mod;
        }
    }
    
    //cout << ans - 479 << '\n';
    cout <<ans << '\n';
}

/*
 */

int32_t main()
{
    fastio
    int testcase = 1;
    //cin >> testcase;
    int x = 1;
    while(testcase --) {
        solve(x ++);
    }
    
    return 0;
}
 

