ICPC Рейтинг
Ваша задача — разработать программу, которая, используя журнал отправки решений на ICPC (Международный студенческий командный чемпионат по программированию), определяет рейтинг команд.
Журнал представляет собой последовательность записей о подаче решений в порядке их отправки. Каждая запись содержит четыре поля: время отправки, номер команды, номер задачи и вердикт. Время отправки — это время, прошедшее с начала соревнования до момента отправки. Поле вердикта указывает, была ли отправленная программа правильной или неправильной, и если неправильной, то какой тип ошибки был найден.
Рейтинг команд определяется по следующим правилам. Обратите внимание, что приведенные здесь правила используются в реальных финалах и региональных соревнованиях ICPC, с некоторыми упрощениями.
Команды, решившие больше задач, занимают более высокие места.
Среди команд, решивших одинаковое количество задач, выше стоят те, у которых меньше общее затраченное время.
Если две или более команд решили одинаковое количество задач, и их общее затраченное время одинаково, они занимают одинаковое место.
Общее затраченное время — это сумма времени, затраченного на каждую решенную задачу. Время для решенной задачи — это время принятой отправки плюс 20 штрафных минут за каждую ранее отклоненную отправку для этой задачи.
Если команда не решила задачу, затраченное время для задачи равно нулю, и, следовательно, даже если есть несколько неправильных отправок, штраф не начисляется.
Можно предположить, что команда никогда не отправляет программу для задачи после правильной отправки для той же задачи.
Входные данные
Входные данные состоят из последовательности наборов данных, каждый из которых имеет следующий формат. Последний набор данных заканчивается строкой с четырьмя нулями.
M T P R
m_1 t_1 p_1 j_1
m_2 t_2 p_2 j_2
.....
m_R t_R p_R j_R
Первая строка набора данных содержит четыре целых числа M, T, P и R. M — это продолжительность соревнования. T — количество команд. P — количество задач. R — количество записей об отправках. Для этих значений выполняются условия 120 ≤ M ≤ 300, 1 ≤ T ≤ 50, 1 ≤ P ≤ 10, и 0 ≤ R ≤ 2000. Каждой команде присваивается номер от 1 до T включительно. Каждой задаче присваивается номер от 1 до P включительно.
Каждая из следующих R строк содержит запись об отправке с четырьмя целыми числами m_k, t_k, p_k и j_k (1 ≤ k ≤ R). m_k — это время отправки. t_k — номер команды. p_k — номер задачи. j_k — вердикт (0 означает правильный, а другие значения означают неправильный). Для этих значений выполняются условия 0 ≤ m_k ≤ M−1, 1 ≤ t_k ≤ T, 1 ≤ p_k ≤ P, и 0 ≤ j_k ≤ 10.
Время отправки округляется до ближайшей минуты.
Записи об отправках даны в порядке отправки. Следовательно, если i < j, то i-я отправка сделана до j-й отправки (m_i ≤ m_j). В некоторых случаях вы можете определить рейтинг двух команд с разницей менее минуты, используя этот факт. Однако такой факт никогда не используется в рейтинге команд. Команды ранжируются только с использованием информации о времени в минутах.
Выходные данные
Для каждого набора данных ваша программа должна выводить номера команд (от 1 до T), начиная с более высоко ранжированных команд. Разделителем между двумя номерами команд должна быть запятая. Когда две команды занимают одинаковое место, разделителем между ними должен быть знак равенства. Команды, занимающие одинаковое место, должны быть перечислены в порядке убывания их номеров.