local function gcd(a,b)
    if b>0 then
        return gcd(b,a%b)
    else
        return a
    end
end

local mod=1000000007
local p={1}
for i=1,200010 do
    p[i+1]=p[i]*2%mod
end


local n=io.read("n")
local iwashi={}
local zero=0
for i=1,n do
    local a,b=io.read("n","n")
    if a==0 and b==0 then
        zero=zero+1
    elseif a==0 then
        iwashi[0]=(iwashi[0] or {})
        iwashi[0][0]=(iwashi[0][0] or {})
        iwashi[0][0][1]=(iwashi[0][0][1] or 0)+1
    elseif b==0 then
        iwashi[0]=(iwashi[0] or {})
        iwashi[0][0]=(iwashi[0][0] or {})
        iwashi[0][0][2]=(iwashi[0][0][2] or 0)+1
    else
        if b<0 then
            a,b=-a,-b
        end
        local gcdab=gcd(math.abs(a),math.abs(b))
        a=a//gcdab
        b=b//gcdab
        if a<0 then
            iwashi[b]=(iwashi[b] or {})
            iwashi[b][-a]=(iwashi[b][-a] or {})
            iwashi[b][-a][1]=(iwashi[b][-a][1] or 0)+1
        else
            iwashi[a]=(iwashi[a] or {})
            iwashi[a][b]=(iwashi[a][b] or {})
            iwashi[a][b][2]=(iwashi[a][b][2] or 0)+1
        end
    end
end

local combination=1
for a,_ in pairs(iwashi) do
    for b,_ in pairs(iwashi[a]) do
        local ba=iwashi[a][b][1] or 0
        local ab=iwashi[a][b][2] or 0
        local select=p[ba+1]+p[ab+1]-1
        combination=(combination*select)%mod
    end
end
combination=(combination+zero-1)%mod
print(combination)