만드는 중입니다

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

나무 품종 세기

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

요약
중위 순회 결과가 주어진 높이 수열과 같고, 자식 노드의 높이가 부모 이상인 이진 트리의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
조합론, 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

친구 Darwin은 매우 유명한 박물학자입니다. 그는 2년 전에 발견한 특정 종의 나무가 몇 가지 품종인지 세고 있다고 말합니다.

이 나무에는 특이한 점이 있습니다. 첫째, 나무는 납작해서 한쪽 면은 남쪽을, 다른 면은 북쪽을 향합니다. 둘째, 가지가 갈라질 때는 정확히 두 개의 하위 가지로 나뉘며, 하나는 서쪽으로, 다른 하나는 동쪽으로 뻗습니다. 따라서 이 나무는 컴퓨터 과학자에게 익숙한 이진 트리로 쉽게 나타낼 수 있습니다. (수학적으로 이진 트리는 빈 트리이거나, 두 자식이 각각 이진 트리인 내부 노드 하나입니다.)

Darwin은 가지가 수평이거나 위로 뻗는다고 설명합니다. 이진 트리 표현에서 각 내부 노드에 가지가 갈라지는 높이(지면으로부터의 거리)를 적으면, 루트가 아닌 노드의 값은 항상 부모의 값보다 크거나 같습니다. 빈 트리에는 값이 없습니다.

이 종의 나무라면 어떤 나무든 값이 붙은 이진 트리의 중위 순회로 얻는 높이 수열이 항상 같습니다. (빈 트리의 중위 순회는 빈 수열입니다. 빈 트리가 아니면 왼쪽 부분 트리의 중위 순회, 루트의 값, 오른쪽 부분 트리의 중위 순회를 차례로 이어 붙인 수열입니다.)

Darwin의 가설은 품종마다 같은 이진 트리가 대응하며, 그 이진 트리가 품종을 하나로 정한다는 것입니다. 또한 위 조건을 만족하는 값 붙은 이진 트리는 모두 실제로 존재하는 품종에 대응합니다. Darwin은 수학적 도구로 품종 수를 셀 수 있다고 믿지만, 그 방법은 알지 못합니다.

이 종의 품종 수를 세는 프로그램을 작성하세요.

입력

첫 줄에 이 종의 나무 하나를 중위 순회해서 얻은 높이 수열의 원소 개수 N이 주어집니다.

이어지는 N개의 줄에는 높이(밀리미터)를 나타내는 정수가 한 줄에 하나씩 주어집니다.

출력

이 종의 품종 수를 1 000 000 007로 나눈 나머지를 한 줄에 출력합니다.

제한

N과 높이는 모두 0 이상 1 000 000 이하입니다.

예제2

  1. 예제 1

    입력
    6
    3
    1
    6
    2
    4
    5
    
    예상 출력
    1
    
  2. 예제 2

    입력
    6
    1
    1
    1
    1
    1
    1
    
    예상 출력
    132