만드는 중입니다

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

고층 빌딩

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

요약
서로 다른 N개의 높이를 배열할 때, 인접한 높이 차의 합이 L 이하가 되는 순열의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

국제 정보 올림피아드(IOI)가 일본 쓰쿠바시에서 열린다. IOI를 준비하기 위해 쓰쿠바시는 큰길을 따라 고층 빌딩 NN개를 일직선으로 세울 계획이다. 빌딩의 높이는 A1,A2,…,ANA_1, A_2, \ldots, A_N이며, 모든 높이는 서로 다르다. 빌딩의 순서는 아직 정해지지 않았으므로, 필요하면 높이의 순서를 바꿀 수 있다. 장식 자재에는 제약이 있어서, 인접한 두 빌딩 높이 차이의 절댓값의 합은 LL 이하여야 한다. 길의 한쪽 끝에서부터 높이가 f1,f2,…,fNf_1, f_2, \ldots, f_N이라면 다음 조건을 만족해야 한다.

∣f1−f2∣+∣f2−f3∣+⋯+∣fN−1−fN∣≤L|f_1 - f_2| + |f_2 - f_3| + \cdots + |f_{N-1} - f_N| \le L

여기서 ∣x∣|x|는 xx의 절댓값이다. 이 조건을 만족하는 빌딩의 순열 개수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 빌딩의 개수 NN과 LL이 공백으로 구분되어 주어진다. 둘째 줄에는 NN개의 정수 A1,A2,…,ANA_1, A_2, \ldots, A_N이 공백으로 구분되어 주어진다. AiA_i는 ii번째 빌딩의 높이이다.

출력

조건을 만족하는 순열의 개수를 1000000007로 나눈 나머지를 한 줄에 출력한다.

제한

  • 1≤N≤1001 \le N \le 100
  • 1≤L≤10001 \le L \le 1000
  • 1≤Ai≤10001 \le A_i \le 1000
  • 1≤i<j≤N1 \le i < j \le N인 모든 i,ji, j에 대해 Ai≠AjA_i \ne A_j

예제2

  1. 예제 1

    입력
    4 10
    3 6 2 9
    
    예상 출력
    6
    
  2. 예제 2

    입력
    8 35
    3 7 1 5 10 2 11 6
    
    예상 출력
    31384