Это задача с двойным запуском. На каждом тесте ваше решение будет запущено два раза.
На уроке информатики Алеся и Борис изучают криптографию. Ребята решили изобрести свой способ шифрования сообщений.
Алеся выбирает k различных целых чисел от 1 до n и обозначает получившееся множество как T. Алеся хочет передать Борису в качестве сообщения множество T в зашифрованном виде. Для этого по множеству T Алеся построит и передаст Борису другое множество R, также состоящее из целых чисел от 1 до n.
Ребята не хотят, чтобы после шифрования размер сообщения изменялся, поэтому R также должно содержать ровно k чисел. А ещё они считают, что если T и R будут содержать хотя бы один общий элемент, то их шифрование будет недостаточно надежным. Поэтому не должно существовать числа, которое входит и в T, и в R, то есть множества T и R не должны пересекаться. Гарантируется, что k≤n/2, поэтому по множеству T всегда возможно построить хотя бы одно множество R.
Когда Борис получит зашифрованное сообщение R, он должен будет его расшифровать и получить исходное сообщение T.
Помогите Алесе и Борису придумать и реализовать алгоритмы шифрования и дешифрования. При первом запуске ваша программа будет выступать в роли Алеси, а при втором запуске --- в роли Бориса.
В первой строке входных данных дано одно число a, равное 1 или 2 --- номер запуска вашей программы.
Во второй строке дано одно число m --- количество сообщений (1≤m≤300,000), которое ваша программа должна зашифровать (в первом запуске) или расшифровать (во втором запуске).
Следующие 2m строк содержат описания m сообщений, по две строки на сообщение.
В первой строке сообщения записаны два целых числа n_i и k_i (2≤n_i≤109, 1≤k_i≤300,000, k_i≤2n_i). Во второй строке сообщения записаны k_i различных целых чисел от 1 до n_i в возрастающем порядке.
Гарантируется, что сумма всех значений k_i в одном тесте не превосходит 300,000.
Если a=1, то данные числа являются исходным сообщением. Если a=2, то данные числа являются результатом запуска вашей программы для шифрования какого-либо сообщения при первом запуске вашей программы.
Программа должна вывести m строк, i-я строка должна содержать k_i различных целых чисел от 1 до n_i в возрастающем порядке.
При первом запуске для каждого исходного сообщения T_i программа должна вывести множество R_i, которое не должно пересекаться с T_i.
При втором запуске программа для каждого зашифрованного сообщения R_i должна восстановить исходное сообщение T_i.
Обратите внимание, что в примере приведены конкретные варианты вывода в первом запуске и ввода во втором запуске. Если ваша программа выведет другое множество R, при втором запуске ввод также будет другой.
Также при втором запуске зашифрованные сообщения передаются программе участника не обязательно в том порядке, в котором они следовали при первом запуске.