n = int(input())
time = list()
for i in range(n):
time.append(tuple(map(int, input().split())))
# time.sort(key=lambda x: x[0]) # x[0]으로 sort하고
# time.sort(key=lambda x: x[1]) # 그 상태에서 x[1]로 sort를 다시하니까 우선순위 높은건 x[1]이란 소리
# 위에 두줄로 sort 하는거랑 밑에 한줄로 sort하는게 같은 의미, 우선순위를 x[1]을 높게둠
time.sort(key=lambda x: (x[1], x[0])) # sort의 우선순위를 x[1], x[0] 순서대로 두겠다.
result = 0 # 정렬 후 첫번쨰 있는 항목은 최적의 해를 위해 무조건 들어가니까 초기값 1로
end_time = 0
for i in time:
if end_time <= i[0]:
end_time = i[1]
result = result + 1
print(result)
# 5
# 6 7
# 6 6
# 5 6
# 5 5
# 7 7
# 반례, 끝나는 시간이 동일한 회의가 여러개 있을 경우 최적의 선택을 위해선 좀 더 일찍 시작하는 회의 (회의실을 효율적으로 사용)를 선택해야함
# 5
# 4 5
# 4 4
# 3 4
# 2 5
# 1 3
# 반례, sort할때 key 순서 중요!!!!!!! time.sort(key=lambda x: (x[0], x[1]))과 같이하면 종료시간 빠른순서대로 제대로 sort가 안됨
종료시간 기준 오름차순으로 정렬 후, 종료시간이 빠른 것 + 시간이 겹치지 않는 것을 매번 선택한다.

https://blog.naver.com/qpghnv/221597913108

https://sectumsempra.tistory.com/88

다양한 파이썬 언더바 사용법들 (https://gomguard.tistory.com/125)
1. 인터프리터에서 마지막 입력 값을 저장하고 싶을 때
2. 아무 의미없이 쓰고싶을때


3. 숫자, 문자의 자릿수 구분

2차원 배열 선언 - 2차원 배열은 사용하기 전에 저렇게 초기화?(선언?) 해줘야함


튜플은 리스트와 동일 그러나 다른점 3가지가 있음
1. 요소가 1개이면 마지막에 , 콤마를 붙여줘야함
a = (1,)
a = (1,2)
2. () 생략 가능
a = 1,
a = 1,2
3. 튜플 요소 변경 불가능