ClosedCup
Пингвину Багу Рокгаду снова чудится заговор. На этот раз ему подозрительна активность пингвинов-коммандос в соревновании по спортивному программированию ClosedCup. В данном мероприятии принимает участие огромное количество команд, потому они все, по мнению Бага, также могут быть потенциальными заговорщиками.
Первое, что необходимо нашему пингвину - это упорядочить разрозненные данные об участниках ClosedCup. У Бага есть список команд, когда-либо принимавших участие в соревнованиях. Каждая команда задается названием и списком участников. В списке одна и та же команда может быть перечислена несколько раз, или одному и тому же названию могут соответствовать разные участники.
Помогите Багу Рокгаду составить для каждого названия команды список её участников за всё время. Для этого выведите список названий команд в лексикографическом порядке {Строка x лексикографически меньше строки y, если либо x является префиксом y (и при этом x ≤ y), либо существует такое i (1 ≤ i ≤ min(|x|, |y|)), что x_i < y_i, и для любого j (1 ≤ j < i) x_j = y_j. Здесь |a| обозначает длину строки a. Лексикографическое сравнение строк реализует оператор < в современных языках программирования}, а для каждого названия перечислите участников, которые выступали за данную команду хотя бы один раз. Участников необходимо выводить в порядке убывания количества участий. При равенстве количества участий выводите данные в лексикографическом порядке.
Входные данные
В первой строке входного файла содержится одно число N (1 ≤ N ≤ 100000) - количество записей о командах. В последующих N строках перечислены данные о командах. Каждая запись состоит из названия команды и списка участников. Название команды состоит из символов с кодами от 32 до 126, кроме 58 (':'
). Название не пусто и его длина не превышает 20 символов. Далее следует двоеточие, пробел и список участников. Каждый участник задается либо именем и фамилией (два непустых слова), либо никнеймом (одно непустое слово). Каждое слово в информации об участнике состоит только из строчных или прописных латинских букв. Имя и фамилия разделяются одним пробелом. Список участников состоит из одного, двух или трёх наименований. Все наименования участников различны. После каждого из участников, кроме последнего, следут запятая и пробел. После последнего наименования следует точка и символ перевода строки. Длина информации об одном участнике не превышает 20 символов (включая пробел между именем и фамилией).
Размер входного файла не превышает одного мегабайта. Входной файл всегда оканчивается пустой строкой.
Выходные данные
В выходной файл выведите M описаний команд, разделённых пустой строкой. Каждое описание должно состоять из названия команды, двоеточия и списка участников, которые хотя бы один раз участвовали в команде с данным названием. Информацию о каждом участнике выводите на новой строке. Сначала выведите четыре пробела, потом имя и фамилию, разделенные пробелом или никнейм участника, потом запятую, пробел и количество раз, этот участник выступал на соревнованиях за эту команду. В конце выведите точку и сразу же символ перевода строки. Участников выводите в порядке уменьшения количества участий, при равенстве, выводите их в лексикографическом порядке.
Описания команд выводите в лексикографическом порядке относительно названий команд. В выходном файле не должно быть лишних пустых строк.