타일 블록 쌓기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

마이클은 생일 선물로 조부모에게서 게임 세트를 받았다. 상자 안에는 타일 블록 nn개가 들어 있고, 블록의 모양은 다음과 같다.

그림 1: 파라미터가 (3,2)(3, 2)인 타일 블록.

블록마다 파라미터 (,m)(\ell, m)이 정해져 있다. 윗면에는 왼쪽에 돌기가 \ell개, 가운데에 돌기가 mm개 튀어나와 있고, 아랫면에는 같은 자리에 왼쪽 \ell개, 가운데 mm개의 홈이 파여 있다.

(,m)(\ell, m) 블록을 같은 (,m)(\ell, m) 블록 위에 올릴 수 있다는 것은 쉽게 알 수 있다. 쌓는 방법은 이것만이 아니다. (,m)(\ell, m) 블록을 (,m)(\ell', m') 블록 위에 올릴 수 있는 조건은 \ell \ge \ell'이고 mmm \ge m'인 것이며, 이 조건을 만족할 때만 올릴 수 있다.

블록 nn개가 담긴 상자 B={b1,b2,,bn}B = \{b_1, b_2, \dots, b_n\}가 주어진다. 블록 bib_i의 파라미터는 (i,mi)(\ell_i, m_i)이다. 이 상자의 블록으로 탑을 쌓을 때, 가장 높은 탑에 들어가는 블록의 개수를 구하라.

입력

입력에는 게임 상자 여러 개가 이어서 주어진다. 각 상자는 정수 nn으로 시작하고, nn은 그 상자에 든 블록의 개수다. 이어지는 nn개 줄에는 각각 정수 두 개가 주어지며, ii번째 블록의 왼쪽 파라미터 i\ell_i와 가운데 파라미터 mim_i를 뜻한다.

nn은 최대 1000010\,000이고, i\ell_imim_i11 이상 100100 이하다. n=0n = 0은 입력의 끝을 뜻한다.

출력

상자마다 그 상자의 블록으로 쌓을 수 있는 가장 높은 탑의 블록 개수를 한 줄에 하나씩 출력한다. 모든 상자를 처리한 뒤에는 마지막 줄에 별표 * 하나만 출력한다.