#https://abc010.contest.atcoder.jp/tasks/abc010_4

#http://kmjp.hatenablog.jp/entry/2014/06/08/0900



#よくわからない最大フロー用のdfs---------------------------------



num=201 #今回のnの最大値100*2+1



def dfs(cur):

	global vis

	global EE

	vis[cur] = 1



	if cur==num:

		return 1



	for i in range(num+1):

		if vis[i]==0 and EE[cur][i]>0 and dfs(i) > 0:

			EE[cur][i] -= 1

			EE[i][cur] += 1

			return 1

	return 0

#------------------------------------------------------------------------------------



#今回の問題分（インプット～隣接リストの作成）------------------



n=int(eval(input()))

s=[]

ss=[]

for i in range(n):

    s.append([int(i) for i in input().split()])

for i in range(n):

    ss.append([int(i) for i in input().split()])

s.sort(key=lambda x:(x[0],x[1]))

ss.sort(key=lambda x:(x[0],x[1]))



pair=[]

for i in range(len(s)):

    right=[]

    for j in range(n):    

        if s[j][0]<ss[i][0] and s[j][1]<ss[i][1]:

            right.append(j)

    pair.append(right)

pair.sort(key=lambda x:len(x))



#print(pair)



#------------------------------------------------------------------------------------



#BFSにぶち込む用のグラフ作成------------------------------------------



EE = [[0 for x in range(num+1)] for y in range(num+11)]

vis = [0] * (num+1)



for i in range(len(pair)): #1から最大100　始点s（番号0）から青い点への辺

	EE[0][i+1] = 1

	EE[i+1][0] = 1



for i in range(n): #101から最大200　赤い点から終点t（番号201）への辺

	EE[i+101][num] = 1



for i in range(len(pair)): #青い点（番号1～100に振り直し）から　赤い点（番号101～200）への辺

    for j in range(len(pair[i])):

        node1, node2 = i+1,pair[i][j]+101

#        EE[node1][node2] = EE[node2][node1] = 1　なんでこれダメなんだろう

        EE[node1][node2] = 1



#風呂～～-----------------------------------------------------------------------



flow=0

while 1:

    for i in range(0, num+1):

        vis[i] = 0

    if dfs(0) == 0:

        break

    flow += 1



print (flow)



#------------------------------------------------------------------------------------





#https://abc010.contest.atcoder.jp/tasks/abc010_4

#http://kmjp.hatenablog.jp/entry/2014/06/08/0900



#よくわからない最大フロー用のdfs---------------------------------



num=201 #今回のnの最大値100*2+1



def dfs(cur):

	global vis

	global EE

	vis[cur] = 1



	if cur==num:

		return 1



	for i in range(num+1):

		if vis[i]==0 and EE[cur][i]>0 and dfs(i) > 0:

			EE[cur][i] -= 1

			EE[i][cur] += 1

			return 1

	return 0

#--------------------------------------------------------------



#今回の問題分（インプット～隣接リストの作成）------------------



n=int(eval(input()))

s=[]

ss=[]

for i in range(n):

    s.append([int(i) for i in input().split()])

for i in range(n):

    ss.append([int(i) for i in input().split()])

#s.sort(key=lambda x:(x[0],x[1]))

#ss.sort(key=lambda x:(x[0],x[1]))



pair=[]

for i in range(len(s)):

    right=[]

    for j in range(n):    

        if s[j][0]<ss[i][0] and s[j][1]<ss[i][1]:

            right.append(j)

    pair.append(right)

#pair.sort(key=lambda x:len(x))



#print(pair)



#------------------------------------------------------------



#BFSにぶち込む用のグラフ作成---------------------------------



EE = [[0 for x in range(num+1)] for y in range(num+11)]

vis = [0] * (num+1)



for i in range(len(pair)): #1から最大100　始点s（番号0）から青い点への辺

	EE[0][i+1] = 1

	EE[i+1][0] = 1



for i in range(n): #101から最大200　赤い点から終点t（番号201）への辺

	EE[i+101][num] = 1



for i in range(len(pair)): #青い点（番号1～100に振り直し）から　赤い点（番号101～200）への辺

    for j in range(len(pair[i])):

        node1, node2 = i+1,pair[i][j]+101

#        EE[node1][node2] = EE[node2][node1] = 1　なんでこれダメなんだろう

        EE[node1][node2] = 1



#風呂～～--------------------------------------------------



flow=0

while 1:

    for i in range(0, num+1):

        vis[i] = 0

    if dfs(0) == 0:

        break

    flow += 1



print (flow)



#----------------------------------------------------------





# https://abc010.contest.atcoder.jp/tasks/abc010_4
# http://kmjp.hatenablog.jp/entry/2014/06/08/0900
# よくわからない最大フロー用のdfs---------------------------------
num = 201  # 今回のnの最大値100*2+1


def dfs(cur):
    global vis
    global EE
    vis[cur] = 1
    if cur == num:
        return 1
    for i in range(num + 1):
        if vis[i] == 0 and EE[cur][i] > 0 and dfs(i) > 0:
            EE[cur][i] -= 1
            EE[i][cur] += 1
            return 1
    return 0


# ------------------------------------------------------------------------------------
# 今回の問題分（インプット～隣接リストの作成）------------------
n = int(eval(input()))
s = []
ss = []
for i in range(n):
    s.append([int(i) for i in input().split()])
for i in range(n):
    ss.append([int(i) for i in input().split()])
s.sort(key=lambda x: (x[0], x[1]))
ss.sort(key=lambda x: (x[0], x[1]))
pair = []
for i in range(len(s)):
    right = []
    for j in range(n):
        if s[j][0] < ss[i][0] and s[j][1] < ss[i][1]:
            right.append(j)
    pair.append(right)
pair.sort(key=lambda x: len(x))
# print(pair)
# ------------------------------------------------------------------------------------
# BFSにぶち込む用のグラフ作成------------------------------------------
EE = [[0 for x in range(num + 1)] for y in range(num + 11)]
vis = [0] * (num + 1)
for i in range(len(pair)):  # 1から最大100　始点s（番号0）から青い点への辺
    EE[0][i + 1] = 1
    EE[i + 1][0] = 1
for i in range(n):  # 101から最大200　赤い点から終点t（番号201）への辺
    EE[i + 101][num] = 1
for i in range(len(pair)):  # 青い点（番号1～100に振り直し）から　赤い点（番号101～200）への辺
    for j in range(len(pair[i])):
        node1, node2 = i + 1, pair[i][j] + 101
        #        EE[node1][node2] = EE[node2][node1] = 1　なんでこれダメなんだろう
        EE[node1][node2] = 1
# 風呂～～-----------------------------------------------------------------------
flow = 0
while 1:
    for i in range(0, num + 1):
        vis[i] = 0
    if dfs(0) == 0:
        break
    flow += 1
print(flow)
# ------------------------------------------------------------------------------------

# https://abc010.contest.atcoder.jp/tasks/abc010_4
# http://kmjp.hatenablog.jp/entry/2014/06/08/0900
# よくわからない最大フロー用のdfs---------------------------------
num = 201  # 今回のnの最大値100*2+1


def dfs(cur):
    global vis
    global EE
    vis[cur] = 1
    if cur == num:
        return 1
    for i in range(num + 1):
        if vis[i] == 0 and EE[cur][i] > 0 and dfs(i) > 0:
            EE[cur][i] -= 1
            EE[i][cur] += 1
            return 1
    return 0


# --------------------------------------------------------------
# 今回の問題分（インプット～隣接リストの作成）------------------
n = int(eval(input()))
s = []
ss = []
for i in range(n):
    s.append([int(i) for i in input().split()])
for i in range(n):
    ss.append([int(i) for i in input().split()])
# s.sort(key=lambda x:(x[0],x[1]))
# ss.sort(key=lambda x:(x[0],x[1]))
pair = []
for i in range(len(s)):
    right = []
    for j in range(n):
        if s[j][0] < ss[i][0] and s[j][1] < ss[i][1]:
            right.append(j)
    pair.append(right)
# pair.sort(key=lambda x:len(x))
# print(pair)
# ------------------------------------------------------------
# BFSにぶち込む用のグラフ作成---------------------------------
EE = [[0 for x in range(num + 1)] for y in range(num + 11)]
vis = [0] * (num + 1)
for i in range(len(pair)):  # 1から最大100　始点s（番号0）から青い点への辺
    EE[0][i + 1] = 1
    EE[i + 1][0] = 1
for i in range(n):  # 101から最大200　赤い点から終点t（番号201）への辺
    EE[i + 101][num] = 1
for i in range(len(pair)):  # 青い点（番号1～100に振り直し）から　赤い点（番号101～200）への辺
    for j in range(len(pair[i])):
        node1, node2 = i + 1, pair[i][j] + 101
        #        EE[node1][node2] = EE[node2][node1] = 1　なんでこれダメなんだろう
        EE[node1][node2] = 1
# 風呂～～--------------------------------------------------
flow = 0
while 1:
    for i in range(0, num + 1):
        vis[i] = 0
    if dfs(0) == 0:
        break
    flow += 1
print(flow)
# ----------------------------------------------------------

-s.sort(key=lambda x: (x[0], x[1])) -ss.sort(key=lambda x: (x[0], x[1])) +# s.sort(key=lambda x:(x[0],x[1])) +# ss.sort(key=lambda x:(x[0],x[1])) -pair.sort(key=lambda x: len(x)) +# pair.sort(key=lambda x:len(x))