만드는 중입니다

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

직원 평가

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

요약
직원 n명의 작업 시간과 홀 수용 인원 k가 주어졌을 때, 각 직원의 두 가지 방식 점수를 곱한 값을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

Yooglex 회사에는 직원이 nn명 있다. ii번째 직원은 하루에 tit_i 단위 시간만큼 일해야 한다. 모든 직원의 tit_i 값은 서로 다르다. Yooglex의 업무 방식은 특이하다. 어느 순간에도 한 명만 일할 수 있고, 나머지는 그 직원이 끝날 때까지 기다려야 한다.

Yooglex 사무실은 대기실과 방으로 이루어져 있다. 대기실에는 동시에 kk명을 넘을 수 없다. 직원들은 사무실 밖에서 줄을 서서 대기실에 들어간다. 이후 다음 알고리즘이 적용된다.

  1. 대기실에 있는 직원이 kk명 미만이고 줄에 직원이 한 명 이상 남아 있는 동안, 줄 맨 앞의 직원이 대기실에 들어간다.
  2. 대기실이 비어 있으면 그날 업무는 끝나고 방은 잠긴다.
  3. 대기실의 직원들 가운데 그날 업무량이 가장 적은 직원을 고른다.
  4. 선택된 직원이 방에 들어가 자기 시간만큼 일하고, 그날 사무실을 떠난다.
  5. 1단계로 돌아간다.

Yooglex 이사회는 적절한 급여를 정하기 위해 직원을 평가하려 한다. 평가 방법 두 가지가 제안되었다.

첫 번째 방법은 간단하다. 직원 줄의 가능한 순열 n!n!개 각각에 대해, 그리고 직원 ii마다, 줄 맨 앞의 직원이 방에 들어간 순간부터 직원 ii가 방에서 나간 순간까지의 시간을 구한다. 각 직원에 대해 이 시간들을 n!n!개 순열 전체에 걸쳐 더한다. 그 합이 최종 점수이다.

두 번째 방법은 더 간단하다. ii번째 직원과 각 줄 순열에 대해, tj>tit_j > t_i이면서 직원 jj가 직원 ii보다 먼저 업무를 끝내는 직원 jj를 모두 센다. 그 개수가 직원 ii의 점수이다.

두 방법 중 하나를 고르는 것은 의미가 없으므로, 세 번째 방법이 제안되었다. 각 직원의 점수는 앞의 두 방법으로 얻은 점수를 곱한 값이다.

세 번째 방법의 점수를 충분히 빠르게 계산할 수 있는가?

입력

첫 줄에는 직원 수 nn과 대기실 수용 인원 kk가 주어진다 (1≤n≤3001 \le n \le 300, 1≤k≤n1 \le k \le n).

둘째 줄에는 각 직원의 업무량 t1,…,tnt_1, \ldots, t_n이 주어진다 (1≤ti≤1091 \le t_i \le 10^9). 모든 tit_i는 서로 다르다.

출력

nn개의 정수를 출력한다. 각 정수는 입력에서의 순서대로 직원의 평가 점수이다. 점수가 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    3 1
    2 1 3
    
    예상 출력
    72 126 0
    
  2. 예제 2

    입력
    4 2
    10 30 2 7
    
    예상 출력
    0 0 3564 2208