from heapq import *
import sys
from collections import *
from itertools import *
from decimal import *
import copy
from bisect import *
import math
sys.setrecursionlimit(4100000)
def gcd(a,b):
    if(a%b==0):return(b)
    return (gcd(b,a%b))
input=lambda :sys.stdin.readline().rstrip()
N=int(input())
AB=[list(map(int,input().split())) for i in range(N)]
mod=10**9+7
idle_max=10**19
fac=[1,1]
for i in range(2,2*N):
    fac.append(i)
#ifac=[pow(i,mod-2,mod) for i in fac]
#def conb(a,b):
#    if b>a:
#        return(0)
#    return(fac[a]*ifac[b]*ifac[a-b]%mod)


data=defaultdict(lambda:-1)
dp=[0 for i in range(N+1)]
dpsum=0
a,b=AB[0]
if a or b:
    dp[0]=1
    dpsum+=1
    data[a*idle_max+b]=0
else:
    dp[0]=0
c=0
for i in range(1,N):
    a,b=AB[i]
    M=dpsum
    if a==0 and b==0:
        continue
    elif a and b:
        M-=dp[data[-b*idle_max+a]]
        M-=dp[data[b*idle_max-a]]
    elif b==0:
        M-=dp[data[-a]]
    elif a==0:
        M-=dp[data[-b*idle_max]]

    dpsum=M*2%mod
    dp[i]=dpsum
    c+=dpsum
    c%=mod
    data[a*idle_max+b]=i
"""#print(dp)
for l in data:
    if data[l]!=-1:
        print(l,data[l])
        #print(l//idle_max,l%idle_max)
"""
print(sum(dp)%mod)
