H. Турнирная таблица
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

Во время проведения соревнований по программированию тестирующая система хранит информацию обо всех отправленных на проверку решениях и автоматически формирует турнирную таблицу, которая показывает, какое место занимает каждый из участников. В этой задаче вам нужно помочь тестирующей системе и самостоятельно составить турнирную таблицу по имеющимся данным.

Тестирующая система хранит информацию о решениях в записях формата Ti Si Pi Ri, где

  • Ti — время отправки i-го решения от момента начала соревнования, указанное в минутах;
  • Si — имя участника, отправившего i-е решение;
  • Pi — идентификатор (буква) задачи, для которой отправлено i-е решение;
  • Ri — результат проверки i-го решения: '+' — решение засчитано, '-' — решение не засчитано.

По данной информации формируется содержание турнирной таблицы в соответствии со следующими правилами:

  • Первый столбец таблицы имеет заголовок «R» и содержит места, занятые участниками:
    • Более высокое место занимает тот участник, который решил больше задач;
    • Если двое или более участников решили одинаковое количество задач, более высокое место занимает участник, имеющий меньшее штрафное время;
    • Если двое или более участников решили одинаковое количество задач и имеют одинаковое штрафное время, более высокое место занимает участник, раньше остальных отправивший последнее верное решение;
    • Если с учётом всех вышеуказанных критериев двое или более участников всё ещё имеют одинаковый результат, то они все занимают одинаковое место. При этом, если X участников заняли одинаковое место Y, то следующий за ними участник занимает место (Y + X).
    • У участников, не решивших ни одной задачи, место не отображается, а сами они следуют в таблице в алфавитном порядке имён.
  • Второй столбец таблицы имеет заголовок «Contestant» и содержит имена участников.
  • Следующие столбцы таблицы имеют заголовки «A», «B» и так далее и содержат информацию об отправленных решениях по задачам:
    • Если участник решил задачу с первой попытки, то соответствующая ячейка должна содержать символ '+';
    • Если участник решил задачу после K неправильных попыток, то соответствующая ячейка должна содержать символ '+', за которым следует число K;
    • Если участник не решил задачу, но отправил K неправильных попыток, то соответствующая ячейка должна содержать символ '-', за которым следует число K;
    • В любом из упомянутых выше случаев ниже в ячейке должно располагаться время отправки последнего решения по задаче, записанное в минимальном подходящем формате — HH:MM, HHH:MM либо HHHH:MM;
    • Решения задачи, отправленные участником после первого засчитанного решения, не учитываются при составлении турнирной таблицы.
  • Предпоследний столбец таблицы имеет заголовок «+» и содержит количество задач, решённых каждым из участников.
  • Последний столбец таблицы имеет заголовок «T» и содержит штрафное время каждого из участников. Штрафное время определяется как сумма минут (значений Ti), прошедших от начала соревнования до моментов отправки каждого засчитанного решения, плюс 20 минут за каждое ошибочное решение по каждой из решённых задач;
  • Строки таблицы сортируются в порядке неубывания мест, занимаемых соответствующими участниками. Строки, соответствующие участникам, занявшим одинаковые места, сортируются в алфавитном порядке имён участников.

Форматирование турнирной таблицы осуществляется в соответствии со следующими правилами:

  • Каждая строка таблицы должна иметь верхнюю и нижнюю границы, составленные из символов '#'. Высота строки заголовка должна равняться одному символу, всех остальных строк — двум символам;
  • Каждая ячейка таблицы должна иметь левую и правую границы, составленные из символов '#'. Содержимое всех ячеек должно отделяться от левой и правой границ не менее чем одним пробелом. Ширина всех ячеек одного столбца должна быть одинаковой и минимально возможной (но различные столбцы могут иметь различную ширину);
  • Содержимое первого, предпоследнего и последнего столбцов таблицы (кроме заголовков) выравнивается по правому краю соответствующих ячеек;
  • Содержимое второго столбца таблицы (кроме заголовка) выравнивается по левому краю соответствующих ячеек;
  • Заголовки столбцов таблицы, а также содержимое всех остальных столбцов выравниваются по центру соответствующих ячеек. Если при этом количество пробелов в ячейке нечётно, то пробелов слева должно быть на один меньше, чем справа.

Составьте турнирную таблицу, соблюдая все описанные требования.

Входные данные

Первая строка содержит целые числа N и M (1 ≤ N ≤ 26, 1 ≤ M ≤ 105) — число задач и число отправленных решений.

Следующие N строк описывают решения. Каждая из них содержит число Ti, строку Si, символы Pi и Ri (0 ≤ Ti ≤ 105, 1 ≤ |Si| ≤ 20, 'A'  ≤ Pi ≤  'Z', Pi {'+', '-'}) — время отправки решения, имя участника, отправившего решение, идентификатор задачи и результат проверки.

Имена участников состоят только из строчных латинских букв и знаков подчёркивания. Идентификаторы задач принадлежат множеству первых N заглавных букв латинского алфавита. Строки, описывающие решения, упорядочены в порядке неубывания значений Ti.

Выходные данные

Выведите турнирную таблицу, составленную и оформленную в соответствии с правилами (см. примеры).

Примеры
Входные данные
4 21
15 rivest A -
47 cormen B -
52 rivest B +
118 stein B -
122 cormen A +
152 cormen C -
267 leiserson B -
320 stein D -
349 cormen B -
366 stein B -
366 leiserson C +
367 leiserson A +
392 rivest A -
487 stein D -
499 cormen B +
567 stein B -
599 stein B +
617 cormen D +
7028 cormen C -
9064 rivest A +
10026 stein D -
Выходные данные
################################################################
# R # Contestant # A # B # C # D # + # T #
################################################################
# 1 # cormen # + # +2 # -2 # + # 3 # 1278 #
# # # 02:02 # 08:19 # 117:08 # 10:17 # # #
################################################################
# 2 # leiserson # + # -1 # + # # 2 # 733 #
# # # 06:07 # 04:27 # 06:06 # # # #
################################################################
# 3 # rivest # +2 # + # # # 2 # 9156 #
# # # 151:04 # 00:52 # # # # #
################################################################
# 4 # stein # # +3 # # -3 # 1 # 659 #
# # # # 09:59 # # 167:06 # # #
################################################################
Входные данные
2 6
5 korotkevich A -
7 korotkevich B -
12 korotkevich A +
14 mitrichev A -
20 korotkevich B -
26 mitrichev A -
Выходные данные
############################################
# R # Contestant # A # B # + # T #
############################################
# 1 # korotkevich # +1 # -2 # 1 # 32 #
# # # 00:12 # 00:20 # # #
############################################
# # mitrichev # -2 # # 0 # 0 #
# # # 00:26 # # # #
############################################
Примечание

В системе Contester вы можете перейти к просмотру турнирной таблицы по ссылке, расположенной в левой части страницы с задачей.