- Описание
- Отправленные решения
22. Алиса, Боб и шифрование
Алиса и Боб всё ещё работают в отделе безопасности передачи данных и занимаются любимым делом — исследуют только что придуманный алгоритм шифрования на криптостойкость.
Алгоритм, придуманный Алисой и Бобом, весьма прост. Во время шифрования алгоритм принимает символы шифруемого текста по одному и заменяет этот символ на ровно один другой символ. Кодировка, которой пользуются Алиса и Боб, состоит из символов, поэтому можно считать, что текст преставляет собой последовательность натуральных чисел, не превосходящих . Во время работы алгоритм шифрования поддерживает перестановку натуральных чисел от до . В начале работы перестановка тождественна, то есть для всех . Когда алгоритму на вход поступает символ , алгоритм заменяет его на номер позиции в перестановке (в 1-индексации), на которой находится символ , а также переносит в начало перестановки. Например, если в некоторый момент работы алгоритма перестановка символов в нём равна , а на вход подаётся символ , то символ будет заменён на символ , поскольку стоит в перестановке на третьей позиции, а перестановка примет вид . Несложно заметить, что результатом шифрования текста, состоящего из натуральных чисел, не превосходящих , также является текст, состоящий из натуральных чисел, не превосходящих .
Для упрощения исследования Алиса и Боб решили реализовать эффективное кодирование и декодирование текстов при помощи своего алгоритма, однако Чак, Крейг и Ева нарушили их планы, поэтому Алиса и Боб просят вас реализовать их алгоритм кодирования.
Формат ввода
В первой строке заданы три целых числа , и () — длина текста, количество символов в кодировке и режим работы программы соответственно.
Если , то требуется зашифровать заданный текст.
Если , то требуется расшифровать заданный зашифрованный текст.
В следующей строке задано целых чисел () — текст для обработки.
Формат вывода
Выведите целых чисел — результат обработки текста. Можно показать, что результат расшифровки текста всегда существует и единственен.
Примечание
В первом примере требуется зашифровать заданный текст. Проиллюстрировать работу алгоритма удобно при помощи таблицы. Обозначим за — символ текста, — перестановку символов кодировки до шифрования , — зашифрованный символ.
Во втором примере требуется расшифровать текст, зашифрованный в первом пункте, поэтому результат расшифровки совпадёт с исходным текстом.
Ограничения
Ограничение времени
1 с
Ограничение памяти
512 МБ
Пример 1
7 3 1
2 3 1 2 1 1 1
2 3 3 3 2 1 1
Пример 2
7 3 2
2 3 3 3 2 1 1
2 3 1 2 1 1 1