팀 나누기

n명의 학생을 정확히 k개의 번호 없는 팀으로 나누되, 임의의 두 팀이 실력값 기준 임계값으로 분리되도록 하는 경우의 수를 센다.

보통7조합론정렬동적 계획법수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

에밋 브라운 박사는 직업을 바꿔 고등학교에서 컴퓨터 과학을 가르친다. 박사가 맡은 반에는 학생이 nn명 있고, 박사는 학생들을 위해 프로그래밍 대회를 열려고 한다. 그런데 교실에 컴퓨터가 kk대뿐이라 팀 대회로 열어야 한다.

박사는 실력이 비슷한 학생끼리 한 팀이 되어야 협동이 잘된다고 생각한다. 박사는 각 학생의 실력 aia_i를 알고 있다. 박사는 어떤 두 팀을 골라도 다음을 만족하는 수 xx가 존재하도록 팀을 나누려고 한다. 한 팀의 학생은 모두 실력이 xx 이하이고, 다른 팀의 학생은 모두 실력이 xx 이상이다. 팀은 정확히 kk개여야 하고, 각 팀에는 학생이 한 명 이상 있어야 한다. 한 팀의 인원수에 상한은 없다.

팀을 나누는 방법이 몇 가지인지 구하라. 팀에는 번호가 없다. 어떤 두 학생이 한 방법에서는 같은 팀이고 다른 방법에서는 서로 다른 팀이면, 두 방법은 서로 다르다. 답을 109+710^9 + 7로 나눈 나머지를 구한다.

입력

첫째 줄에 반의 학생 수 nn과 만들어야 하는 팀의 개수 kk가 공백으로 구분되어 주어진다. (1n,k20001 \le n, k \le 2000)

둘째 줄에 학생 nn명의 실력 aia_i가 공백으로 구분되어 주어진다. (1ain1 \le a_i \le n)

출력

팀을 나누는 방법의 수를 109+710^9 + 7로 나눈 나머지를 한 줄에 출력한다.