ICPC 순위

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

ICPC(International Collegiate Programming Contest)의 제출 기록을 읽어 팀 순위를 정하는 프로그램을 작성한다.

기록은 제출한 순서대로 나열된 제출 정보의 목록이다. 각 기록은 경과 시간, 팀 번호, 문제 번호, 채점 결과 네 항목으로 이루어진다. 경과 시간은 대회 시작부터 그 제출까지 흐른 시간이다. 채점 결과는 제출한 프로그램이 정답인지 오답인지 알려주고, 오답이면 어떤 종류의 오류가 나왔는지도 알려준다.

팀 순위는 아래 규칙으로 정한다. 여기 적은 규칙은 실제 ICPC 세계 대회와 지역 대회에서 쓰는 규칙에서 세부 규칙 몇 가지를 덜어낸 것이다.

  1. 더 많은 문제를 푼 팀이 더 높은 순위를 받는다.
  2. 푼 문제 수가 같으면 총 소요 시간이 더 적은 팀이 더 높은 순위를 받는다.
  3. 푼 문제 수가 같고 총 소요 시간도 같은 팀이 둘 이상이면 그 팀들은 같은 순위를 받는다.

총 소요 시간은 푼 문제마다 계산한 소요 시간을 모두 더한 값이다. 어떤 문제의 소요 시간은 정답 제출의 경과 시간에, 그 문제에서 그전까지 오답 판정을 받은 제출 하나마다 페널티 20분을 더한 값이다.

풀지 못한 문제의 소요 시간은 0이다. 그래서 오답 제출이 여러 번 있어도 페널티는 붙지 않는다.

한 팀이 어떤 문제를 맞힌 뒤에 같은 문제를 다시 제출하는 일은 없다고 가정해도 된다.

입력

입력은 다음 형식의 데이터셋이 여러 개 이어진 것이다. 마지막 데이터셋 다음 줄에는 0이 네 개 주어진다.

M T P R
m1 t1 p1 j1
m2 t2 p2 j2
.....
mR tR pR jR

각 데이터셋의 첫 줄에는 정수 MM, TT, PP, RR이 주어진다. MM은 대회 시간, TT는 팀 수, PP는 문제 수, RR은 제출 기록 수이다. 이 값들은 120M300120 \le M \le 300, 1T501 \le T \le 50, 1P101 \le P \le 10, 0R20000 \le R \le 2000을 만족한다. 팀 번호는 1부터 TT까지, 문제 번호는 1부터 PP까지이다.

이어지는 RR개의 줄에는 제출 기록 하나가 정수 네 개 mkm_k, tkt_k, pkp_k, jkj_k (1kR1 \le k \le R)로 주어진다. mkm_k는 경과 시간, tkt_k는 팀 번호, pkp_k는 문제 번호, jkj_k는 채점 결과이고, jkj_k가 0이면 정답, 나머지 값은 오답을 뜻한다. 이 값들은 0mkM10 \le m_k \le M-1, 1tkT1 \le t_k \le T, 1pkP1 \le p_k \le P, 0jk100 \le j_k \le 10을 만족한다.

경과 시간은 분 단위로 반올림한 값이다.

제출 기록은 제출한 순서대로 주어진다. 즉 i<ji < j이면 ii번째 제출이 jj번째 제출보다 먼저 이루어졌고 mimjm_i \le m_j이다. 이 사실을 쓰면 1분이 안 되는 차이로 두 팀의 순위를 가릴 수 있는 경우도 있다. 하지만 순위를 정할 때 그 정보는 쓰지 않는다. 순위는 분 단위 시간만으로 정한다.

출력

각 데이터셋마다 순위가 높은 팀부터 차례로 팀 번호(1부터 TT까지)를 한 줄에 출력한다. 두 팀 번호 사이의 구분자는 쉼표이다. 순위가 같은 두 팀 사이의 구분자는 등호이다. 순위가 같은 팀은 팀 번호가 큰 것부터 나열한다.