Условие:
Вы - криптоаналитик.
Перехвачено несколько зашифрованных сообщений. Известно, что использовался один и тот же алгоритм шифрования.
Алфавит состоит из заглавных русских букв:
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
Возможные алгоритмы:
1. Сдвиг на k вперед (алгоритм Цезаря)
Каждая буква заменяется на букву через k позиций вперед.
Пример (k = 2):
А → В, Б → Г, …, Я→Б.
2. Шифр Виженера
3. Используется ключ - строка из букв.
Ключ повторяется, чтобы совпасть по длине с сообщением.
Для каждой позциии:
1. Находим номер буквы в алфавите (А = 0, Б = 1, … Я = 32).
2. Выполнить сложение по модулю 33:
зашифрованная = (исходная + ключ) mod 33
3. Попарная перестановка
4. Строка разбивается на пары букв:
АБ ВГ ДЕ Ж
В каждой паре буквы меняются местами:
АБ → БА
ВГ → ГВ
ДЕ → ЕД
Если длина строки нечетная – последняя буква остается без изменений:
АБВГД → БАГВД.
Вам даны несколько пар строк:
исходное_сообщение зашифрованное_сообщение
Все пары зашифрованы одним и тем же алгоритмом.
Напишите программу, которая:
1. Определяет, какой алгоритм использовался
2. Если используется шифр Цезаря - находит значение k
3. Если используется шифр Виженера - находит ключ
4. Расшифровывает новое сообщение
Формат ввода:
Первая строка: n - количество известных пар
Далее n строк: исходное зашифрованное
Последняя строка: зашифрованное_сообщение
Формат вывода:
Выведите: расшифрованное сообщение
Ограничение:
1 ≤ n ≤ 5
длина строки ≤ 20
длина ключа ≤ 5
гарантируется, что решение единственное

