마천루
시간 제한6초메모리 제한512 MB
1부터 n까지 높이를 나열할 때 왼쪽과 오른쪽에서 보이는 건물 수가 주어진 값과 일치하는 경우를 셉니다.
문제
마천루는 종이와 연필로 푸는 퍼즐이다. 정사각 격자에서 진행하고, 모든 칸에는 건물이 하나씩 서 있다. 격자의 각 행과 각 열에는 높이가 인 건물, 높이가 인 건물, 이런 식으로 높이가 인 건물까지 정확히 하나씩 놓인다. 각 행과 각 열의 양쪽 끝에는 숫자가 적혀 있을 수 있다. 이 숫자는 그 자리에서 바라볼 때 보이는 건물의 개수이고, 높은 건물은 그 뒤에 있는 낮은 건물을 가린다. 퍼즐을 풀 때는 격자 바깥의 숫자만 주어지고, 각 칸에 놓인 건물의 높이를 알아내야 한다.
크기가 인 퍼즐에서 행 하나만 떼어 내 생각하자. 그 행을 왼쪽에서 볼 때 보이는 건물의 수와 오른쪽에서 볼 때 보이는 건물의 수를 안다면, 높이 부터 까지의 건물을 그 행에 배치하는 방법은 몇 가지인가?
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 정수 세 개, (), (), ()로 주어진다. 은 행의 크기이고, 와 는 각각 왼쪽과 오른쪽에서 보이는 건물의 개수다. 입력은 0이 세 개 있는 줄로 끝난다.
출력
각 테스트 케이스마다 조건을 만족하는 배치의 수를 1,000,000,007로 나눈 나머지를 한 줄에 하나씩 출력한다. 오타가 아니고, 마지막 자리는 7이다. 여분의 공백은 출력하지 않으며, 답과 답 사이에 빈 줄도 넣지 않는다.