만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

마천루

시간 제한6초메모리 제한512 MB

요약
1부터 n까지 높이를 나열할 때 왼쪽과 오른쪽에서 보이는 건물 수가 주어진 값과 일치하는 경우를 셉니다.
난이도

보통10점 중 7점

유형
조합론, 동적 계획법
정답자
아직 제출이 없습니다

문제

마천루는 종이와 연필로 푸는 퍼즐이다. n×nn \times n 정사각 격자에서 진행하고, 모든 칸에는 건물이 하나씩 서 있다. 격자의 각 행과 각 열에는 높이가 11인 건물, 높이가 22인 건물, 이런 식으로 높이가 nn인 건물까지 정확히 하나씩 놓인다. 각 행과 각 열의 양쪽 끝에는 숫자가 적혀 있을 수 있다. 이 숫자는 그 자리에서 바라볼 때 보이는 건물의 개수이고, 높은 건물은 그 뒤에 있는 낮은 건물을 가린다. 퍼즐을 풀 때는 격자 바깥의 숫자만 주어지고, 각 칸에 놓인 건물의 높이를 알아내야 한다.

크기가 n×nn \times n인 퍼즐에서 행 하나만 떼어 내 생각하자. 그 행을 왼쪽에서 볼 때 보이는 건물의 수와 오른쪽에서 볼 때 보이는 건물의 수를 안다면, 높이 11부터 nn까지의 건물을 그 행에 배치하는 방법은 몇 가지인가?

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 정수 세 개, nn (1≤n≤50001 \le n \le 5000), left\text{left} (1≤left≤n1 \le \text{left} \le n), right\text{right} (1≤right≤n1 \le \text{right} \le n)로 주어진다. nn은 행의 크기이고, left\text{left}와 right\text{right}는 각각 왼쪽과 오른쪽에서 보이는 건물의 개수다. 입력은 0이 세 개 있는 줄로 끝난다.

출력

각 테스트 케이스마다 조건을 만족하는 배치의 수를 1,000,000,007로 나눈 나머지를 한 줄에 하나씩 출력한다. 오타가 아니고, 마지막 자리는 7이다. 여분의 공백은 출력하지 않으며, 답과 답 사이에 빈 줄도 넣지 않는다.

예제1

  1. 예제 1

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