from collections import defaultdict
N = int(input())
mod = 1000000007

# 両方の符号が同じやつ同士は必ず相性が悪くならない
# 符号が異なる数字の組み合わせと両方の符号が同じ奴が相性が悪くなる 
k = []
d = defaultdict(int)
cnt = 0
for i in range(N):
    a, b = map(int, input().split())
    if a * b > 0:
        cnt += 1
        key = str(a*10**20+b)
        d[key] += 1
    else:
        k.append([min(a, b), max(a, b)])

# からの状態を引く
ans = pow(2, cnt, mod) - 1

for a, b in k:
    a = -a
    key = str(a*10**20+b)
    if d[key] == 0:
        ans *= 2
    else:
        ans += pow(2, N-d[key]-1, mod)
    ans %= mod

print(ans)
