Дві інструкції#2486

Дві інструкції

1 секунда
64 мегабайти
Легка

Процесор 8086 має важливу команду "pop sp", яка зчитує значення покажчика стека з вершини стека.

Додатково, процесор 80486 запровадив ще одну важливу інструкцію для маніпуляцій з регістром покажчика стека: "bswap sp". Ця інструкція міняє місцями старший і молодший байти покажчика стека.

Вам задано початкове значення регістра sp та вміст пам'яті. Побудуйте найкоротшу програму, яка, при виконанні, призведе до вказаного фінального значення sp. Програма повинна складатись лише з інструкцій "pop sp" та "bswap sp".

Вхідні дані

У першому рядку задано два шістнадцятибітних числа від 0000 до FFFF, що задають початкове й фінальне значення регістра sp. Далі йдуть 4096 рядків дампу сегмента пам'яті.

Формат дампу: 8 байтів2 пробіли8 байтів, де кожні 8 байтів — послідовність з 8 підряд байтових значень, розділених одним пробілом. Кожне байтове значення — це двозначне шістнадцяткове число від 00 до FF.

Вихідні дані

У першому рядку виведіть десяткове число, що задає кількість байтів у найкоротшій програмі. Починаючи з другого рядка, наведіть дамп коду отриманої програми у тому ж форматі, що й у вхідних даних. Останній (можливо неповний) рядок дампу має одразу завершуватись символом нового рядка, без пробілів у кінці після останнього виведеного байта.

Якщо існує декілька найкоротших програм, виведіть лексикографічно найменшу.

Якщо розв'язати задачу з даним дампом пам'яті та значеннями sp неможливо, виведіть єдиний рядок з текстом IMPOSSIBLE.

Приклади

Приклад 1

Loading
Loading