만드는 중입니다

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

카드 카운팅 클럽

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

요약
각 플레이어의 카드 손패와 벌점 P가 주어질 때, 카드를 모두 잃고 탈락하는 플레이어의 순서를 출력합니다.
난이도

보통10점 중 6점

유형
힙, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

카드 카운팅 클럽은 카드 카운팅 연습과 게임 순서 정하기를 한 번에 하고 싶었다. 그래서 다음과 같은 탈락 게임을 하기로 했다.

  1. 게임을 시작할 때 각 플레이어에게 같은 개수의 카드를 나눠 준다.
  2. 각 턴의 처음에 모든 플레이어는 자기 손패에서 가장 작은 값의 카드를 다른 플레이어에게 보여준다.
  3. 가장 작은 카드를 가진 플레이어가 그 카드를 버린다.
    1. 카드를 버리는 플레이어는 한 명뿐이다. 동점이면 이름이 사전순(lexicographic order)으로 앞서는 플레이어가 버린다.
    2. 버리지 못한 플레이어는 카드에 작은 표시를 남기고 그 카드를 다시 손패에 넣는다. 표시가 하나 생길 때마다 카드 값은 정해진 벌점 P만큼 올라간다.
  4. 손패의 카드를 모두 잃은 플레이어는 탈락한다.
  5. 모든 플레이어가 탈락할 때까지 게임을 진행한다.

탈락한 순서는 클럽 회원들이 다른 게임을 할 때의 순서가 된다.

입력

첫 줄에 정수 NN, MM, PP가 공백으로 구분되어 주어진다 (2≤N≤352 \leq N \leq 35, 1≤M≤170001 \leq M \leq 17000, 1≤P≤101 \leq P \leq 10). NN은 플레이어 수, MM은 각 플레이어의 손패 크기, PP는 표시 하나당 더해지는 벌점이다.

이어지는 NN개의 줄에는 플레이어 이름과, 그 플레이어 손패의 카드 값 MM개 x1,x2,…,xMx_1, x_2, \ldots, x_M (1≤xi≤2000001 \leq x_i \leq 200000)이 공백으로 구분되어 주어진다. 카드 값은 한 손패 안에서도, 손패끼리도 중복될 수 있다. 이름은 대문자로만 이루어지며 길이는 2 이상 10 이하다.

출력

한 줄에 게임에서 탈락한 순서대로 플레이어 이름을 출력한다. 연속한 이름은 공백 한 칸으로 구분한다.

예제2

  1. 예제 1

    입력
    3 3 3
    BOB 5 2 1
    EVE 1 4 3
    ALICE 3 4 2
    
    예상 출력
    EVE ALICE BOB
    
  2. 예제 2

    입력
    3 1 5
    WYNKEN 7
    BLYNKEN 7
    NOD 7
    
    예상 출력
    BLYNKEN NOD WYNKEN