만드는 중입니다

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

체육 수업

면접 대비

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

요약
n명의 번호를 연속된 구간으로 나누되, 각 구간이 비내림차순 또는 비오름차순이 되도록 하는 방법의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 5점

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

문제

체육 수업 시간에 포마는 흥미로운 활동을 생각해 냈다.

학생들이 한 줄로 선 뒤, 포마는 학생마다 고유 번호를 하나씩 주었다. 이제 그는 학생들에게 다음 조건을 모두 만족하도록 그룹으로 나뉘어 달라고 요청한다.

  • 각 그룹은 줄의 연속된 구간이다. 즉 그룹에 속한 학생들은 줄에서 바로 이어서 서 있다.
  • 그룹끼리 서로 겹치지 않는다.
  • 각 그룹에서 학생들의 번호 수열은 단조 비감소이거나 단조 비증가이다.

여러 방법을 따져 보던 포마는 이렇게 나누는 방법이 모두 몇 가지인지 궁금해졌다. 포마는 학생들을 이런 그룹으로 나누는 방법의 수를 계산하는 프로그램을 작성해 달라고 부탁한다.

입력

첫 번째 줄에 학생 수 nn (1≤n≤50001 \le n \le 5000)이 주어진다. 두 번째 줄에는 학생들의 고유 번호 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤1091 \le a_i \le 10^9)이 순서대로 주어진다.

출력

나눔 방법의 수를 한 줄에 출력한다. 답이 매우 클 수 있으므로 109+710^9+7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

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

    입력
    5
    1 2 2 2 1
    
    예상 출력
    15
    
  3. 예제 3

    입력
    5
    1 2 1 2 1
    
    예상 출력
    8