Тайное послание
시간 제한1초메모리 제한1024 MB
1부터 n까지의 수 중 k개를 고른 집합 T를, 겹치지 않는 같은 크기 집합 R로 보내는 암호화와 복호화를 구현한다.
문제
Это задача с двойным запуском. На каждом тесте ваше решение будет запущено два раза.
На уроке информатики Алеся и Борис изучают криптографию. Ребята решили изобрести свой способ шифрования сообщений.
Алеся выбирает различных целых чисел от до и обозначает получившееся множество как . Алеся хочет передать Борису в качестве сообщения множество в зашифрованном виде. Для этого по множеству Алеся построит и передаст Борису другое множество , также состоящее из целых чисел от до .
Ребята не хотят, чтобы после шифрования размер сообщения изменялся, поэтому также должно содержать ровно чисел. А ещё они считают, что если и будут содержать хотя бы один общий элемент, то их шифрование будет недостаточно надежным. Поэтому не должно существовать числа, которое входит и в , и в , то есть множества и не должны пересекаться. Гарантируется, что , поэтому по множеству всегда возможно построить хотя бы одно множество .
Когда Борис получит зашифрованное сообщение , он должен будет его расшифровать и получить исходное сообщение .
Помогите Алесе и Борису придумать и реализовать алгоритмы шифрования и дешифрования. При первом запуске ваша программа будет выступать в роли Алеси, а при втором запуске --- в роли Бориса.
입력
В первой строке входных данных дано одно число , равное или --- номер запуска вашей программы.
Во второй строке дано одно число --- количество сообщений (), которое ваша программа должна зашифровать (в первом запуске) или расшифровать (во втором запуске).
Следующие строк содержат описания сообщений, по две строки на сообщение.
В первой строке сообщения записаны два целых числа и (, , ). Во второй строке сообщения записаны различных целых чисел от до в возрастающем порядке.
Гарантируется, что сумма всех значений в одном тесте не превосходит .
Если , то данные числа являются исходным сообщением. Если , то данные числа являются результатом запуска вашей программы для шифрования какого-либо сообщения при первом запуске вашей программы.
출력
Программа должна вывести строк, -я строка должна содержать различных целых чисел от до в возрастающем порядке.
При первом запуске для каждого исходного сообщения программа должна вывести множество , которое не должно пересекаться с .
При втором запуске программа для каждого зашифрованного сообщения должна восстановить исходное сообщение .
힌트
Обратите внимание, что в примере приведены конкретные варианты вывода в первом запуске и ввода во втором запуске. Если ваша программа выведет другое множество , при втором запуске ввод также будет другой.
Также при втором запуске зашифрованные сообщения передаются программе участника не обязательно в том порядке, в котором они следовали при первом запуске.