require 'set'
denom = 1000000007
n = gets.to_i
a_team = {}
b_team = {}
a_team.default = 0
b_team.default = 0
zero_count = 0
n.times.map{|i|
    a, b = gets.split.map(&:to_i)
    val = a * b
    if val == 0
        zero_count += 1
    elsif val > 0
        a_team[val] += 1
    else
        b_team[-val] += 1
    end
}

all = 1
n.times{|i|
    all = all * 2 % denom
}

except = 0
(Set.new(a_team.keys) & Set.new(b_team.keys)).each{|key|
    a_ng_choice = 1
    a_team[key].times{|i|
        a_ng_choice = a_ng_choice * 2 % denom
    }
    b_ng_choice = 1
    b_team[key].times{|i|
        b_ng_choice = b_ng_choice * 2 % denom
    }

    ng_choice = (a_ng_choice - 1) * (b_ng_choice - 1)
    (n - a_team[key].size - b_team[key].size).times{|i|
        ng_choice = ng_choice * 2 % denom
    }

    except += ng_choice
    except %= denom
}

answer = all - except
while answer < 0
    answer += denom
end
puts answer
