워터파크

면접 대비

시간 제한1초메모리 제한128 MB

요약
모든 간선이 번호가 작은 점에서 큰 점으로 향하는 DAG에서 1번 점에서 n번 점까지 가는 서로 다른 경로의 수를 센다.
난이도

보통10점 중 4점

유형
동적 계획법, 그래프
정답자
아직 제출이 없습니다

문제

동네 워터파크에는 언덕을 따라 여러 갈래로 교차하며 내려가는 훌륭한 미끄럼틀 단지가 있다. 출발점과 도착점은 각각 하나뿐이지만, 중간의 여러 지점에서 방향을 틀어 다른 길로 갈 수 있다. 월터와 완다는 미끄럼틀을 타고 내려가는 서로 다른 경로가 정확히 몇 가지인지 궁금해한다. 이들의 문제를 풀 수 있겠는가?

좀 더 정확히 말하면, 길이 갈라지거나 합쳐지는 지점이 nn개 있고 각각 번호가 매겨져 있다(출발점은 11번, 도착점은 nn번). 모든 길은 언덕 아래쪽, 즉 더 큰 번호의 지점으로만 향한다. 어떤 길은 서로 만나지 않고 교차하기도 하지만 그런 경우는 신경 쓰지 않아도 되고, 미끄럼틀을 타는 사람들 사이의 충돌도 고려하지 않는다. 우리가 풀어야 할 것은 단지 언덕을 따라 내려가며 거칠 수 있는 서로 다른 지점 번호 수열이 몇 가지인지 세는 것이다.

예를 들어 어떤 작은 워터파크에 지점이 44개 있고, 11번에서 22번과 44번으로, 22번에서 33번과 44번으로, 33번에서 44번으로 가는 직행 미끄럼틀이 있다고 하자. 내려가는 방법은 33가지다: (1,2,3,4)(1,2,3,4), (1,2,4)(1,2,4), (1,4)(1,4)로 갈 수 있다.

힌트: 미끄럼틀의 맨 아래에서부터 거꾸로 생각해 보라.

입력

첫 번째 줄에 지점의 개수를 나타내는 정수 nn (1≤n≤99991 \le n \le 9999)이 주어진다. 이어지는 각 줄에는 x y 형태의 지점 쌍이 주어지며, 이는 xx번 지점에서 yy번 지점으로 가는 직행 미끄럼틀을 뜻한다(1≤x<y≤n1 \le x < y \le n). 예를 들어 1234 8765는 12341234번 지점에서 87658765번 지점으로 가는 직행 미끄럼틀을 나타낸다. 입력의 마지막은 지점 쌍 0 0으로 표시된다.

출력

11번 지점에서 nn번 지점까지의 서로 다른 경로의 수를 정수 하나로 출력한다. 이 값은 2302^{30}보다 작다고 가정해도 된다. 11번 지점에서 nn번 지점으로 가는 경로가 하나도 없을 수도 있으며, 이 경우 경로의 수는 00이다.

예제2

  1. 예제 1

    입력
    4
    1 2
    1 4
    2 3
    2 4
    3 4
    0 0
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2
    1 2
    0 0
    
    예상 출력
    1