Перед выпуском VK Messenger’а разработчики из компании IT-компании <<VK>>, как и положено, убеждаются в корректности работы приложения. Проверкой корректности работы систем занимаются тестировщики и QA-инженеры.
Часть функциональных тестов для тестирования смены ников выглядит следующим образом:
-
генерируется случайный сценарий взаимодействия пользователей с приложением;
-
в приложении симулируется выполнение этого сценария;
-
проверяется корректность итогового состояния приложения.
Вам предлагается почувствовать себя в роли тестировщика и реализовать решение, обрабатывающее сценарий без взаимодействия с приложением. Результат обработки сценария затем будет сравниваться с итоговым состоянием приложения.
Каждый сценарий состоит из трех наборов событий.
-
Первый набор состоит из событий вида <<в момент времени \(t_i\) поступил запрос регистрации нового пользователя с ID
\(\mathtt{id}_i\) и ником \(\mathtt{handle}_i\)>>.
Гарантируется, что ID
уникальны для всех пользователей приложения. Если выбранный ник никем не занят, регистрация проходит успешно, иначе запрос на регистрацию отклоняется. Во втором случае пользователь с тем же ID
может попробовать зарегистрироваться еще раз.
-
Второй набор описывает события вида <<в момент времени \(t_i\) пользователь с ником \(\mathtt{handle}_{i,1}\) отправляет запрос на смену ника на \(\mathtt{handle}_{i,2}\)>>.
Гарантируется, что для каждого такого запроса ник \(\mathtt{handle}_{i,1}\) кому-то принадлежит. Если \(\mathtt{handle}_{i,2}\) уже занят каким-либо пользователем, запрос отклоняется, иначе пользователь успешно меняет ник. При успешной смене ника старый ник перестает ассоциироваться с каким-либо пользователем, пока кто-то снова его не займет.
-
Третий набор описывает события вида <<в момент времени \(t_i\) пользователь с ником \(\mathtt{handle}_{i,1}\) отправляет сообщение пользователю с ником \(\mathtt{handle}_{i,2}\).
Гарантируется, что и \(\mathtt{handle}_{i,1}\) и \(\mathtt{handle}_{i,2}\) на момент времени \(t_i\) соответствуют каким-то зарегистрированным пользователям.
Также гарантируется, что никакие два события не происоходят в одно и то же время, то есть все \(t_i\) уникальны.
Вам даны описания всех трех наборов событий. Определите для каждого пользователя, сколько он всего получил сообщений, и от какого пользователя он получил больше всего сообщений за весь сценарий.
Формат входных данных
В первой строке ввода дано единственное целое число \(T\) — количество сценариев, которое вам необходимо обработать (\(1 \le T \le 100\)).
Далее следуют \(T\) описаний сценариев. Описание каждого сценария начинается с пустой строки, после чего следуют три набора событий. В первой строке описания \(q\)-го набора (\(q\) от \(1\) до \(3\)) дано единственное целое число \(n_q\) — количество событий в наборе, после чего следуют \(n_q\) строк в указанном ниже формате (\(1 \le n_1 + n_2 + n_3 \le 1000\); \(0 \le n_q\)).
-
События первого набора задаются в формате <<REG
\(\mathtt{id}_i\) BY
\(\mathtt{handle}_i\) AT \(t_i\)>>.
-
События второго набора задаются в формате <<CHANGE
\(\mathtt{handle}_{i,1}\) TO
\(\mathtt{handle}_{i,2}\) AT
\(t_i\)>>.
-
События третьего набора задаются в формате <<SEND FROM
\(\mathtt{handle}_{i,1}\) TO
\(\mathtt{handle}_{i,2}\) AT
\(t_i\)>>.
Моменты событий \(t_i\) — целые числа от \(1\) до \(10^9\). Также все \(\mathtt{id}_i\) — целые числа от \(1\) до \(10^9\), а \(\mathtt{handle}_i\) — строки из маленьких латинских букв длины не более \(10\).
Гарантируется, что в каждом наборе входных данных все \(t_i\) различны. Гарантируется, что успешно зарегистрированный пользователь не предпринимает попытки зарегистрироваться еще раз.
Формат выходных данных
Для каждого сценария выведите требуемую статистику для каждого пользователя.
В первой строке статистики выведите целое число \(q\) — количество зарегистрированных пользователей. В следующих \(q\) строках выведите статистику для каждого пользователя в порядке возрастания их ID
в формате <<<
\(\mathtt{id}\)> RECEIVED <
\(\mathtt{total}\)> TOP <
\(\mathtt{count}_\mathrm{top}\)> FROM <
\(\mathtt{id}_\mathrm{top}\)>
>>, где \(\mathrm{total}\) — суммарное количество полученных пользователем сообщений, \(\mathtt{id}_\mathrm{top}\) — ID
пользователя, от которого он получил больше всего сообщений, а \(\mathtt{count}_\mathrm{top}\) — само количество сообщений, полученных от пользователя \(\mathtt{id}_\mathrm{top}\).
Если у некоторого пользователя есть несколько собеседников, отправивших ему максимальное число сообщений, выведите в качестве \(\mathtt{id}_\mathrm{top}\) минимальный из их ID
. Если пользователь не получал сообщения, считайте \(\mathtt{count}_\mathrm{top}\) равным \(0\).
Примеры
№ | Входные данные | Выходные данные |
1
|
2
4
REG 1 BY sh AT 10
REG 2 BY sh AT 11
REG 3 BY qwerty AT 12
REG 2 BY shvetz AT 15
2
CHANGE sh TO shvetz AT 13
CHANGE shvetz TO sh AT 18
4
SEND FROM shvetz TO qwerty AT 14
SEND FROM shvetz TO shvetz AT 16
SEND FROM shvetz TO qwerty AT 17
SEND FROM qwerty TO sh AT 19
2
REG 1 BY a AT 10
REG 2 BY b AT 11
4
CHANGE a TO c AT 14
CHANGE b TO a AT 17
CHANGE c TO a AT 20
CHANGE c TO b AT 23
10
SEND FROM a TO b AT 12
SEND FROM b TO a AT 13
SEND FROM b TO c AT 15
SEND FROM b TO c AT 16
SEND FROM a TO c AT 18
SEND FROM a TO c AT 19
SEND FROM c TO a AT 21
SEND FROM a TO c AT 22
SEND FROM a TO b AT 24
SEND FROM a TO b AT 25
|
2
1 RECEIVED 2 TOP 1 FROM 1
3 RECEIVED 2 TOP 2 FROM 1
2
1 RECEIVED 8 TOP 8 FROM 2
2 RECEIVED 2 TOP 2 FROM 1
|