eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

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

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

Можливо найголовнішою інструкцією процесора 8086 є команда "\textbf{pop sp}", яка бере значення вказівника стека з вершини стека. У доповнення до цієї команди у процесорі 80486 було додано іншу дуже важливу інструкцію для роботи з регістром вказівника стека - "\textbf{bswap sp}". Вона міняє місцями старший та молодший байти вказівника. \begin{itemize} \item "\textbf{bswap sp}" має код інструкції \textbf{0F CC}; \item "\textbf{pop sp}" має код інструкції \textbf{5C}; \item сегмент пам'яті має довжину \textbf{65536} байт; \item Пам'ять вважається зацикленою - після комірки з адресою \textbf{FFFF} йде комірка з адресою \textbf{0000} (усі адреси та коди подано у шістнадцятковій системі числення); \item "\textbf{pop sp}" бере значення двохбайтового слова за адресою, на яку вказує \textbf{sp}, і завантажує його у \textbf{sp} (молодший байт йде першим). \end{itemize} Вам задано початкове значення регістра \textbf{sp} та вміст памя'ти. Cтворіть саму коротку програму, яка після свого завершення отримає в \textbf{sp} задане кінцеве значення. Програма повинна складатись лише з операцій "\textbf{pop sp}" та "\textbf{bswap sp}". \InputFile Перший рядок містить два шістнадцятибітних числа у межах від \textbf{0000} до \textbf{FFFF} - початкове та кінцеве значення регістра \textbf{sp}. Наступні \textbf{4096} рядків містять дамп сегменту пам'яті. Дамп задається у форматі \[\textbf{8 байт}\]\[\textbf{2} \textbf{пропуски}\]\[\textbf{8 байт}\], де \[\textbf{8 байт}\] - це \textbf{8} значень послідовних байтів, відокремлених одним пропуском. Байт задається як шістнадцяткове число у межах від \textbf{00} до \textbf{FF}, яке має рівно дві цифри. \OutputFile У першому рядку виведіть кількість байтів коду у найкоротшій програмі у десятковій системі числення. Починаючи з другого рядкаи, виведіть дамп коду отриманої програми у тому ж форматі, що і при введенні. Останній (можливо, незавершений) рядок дампа повинен бути обов'язково завершений переведенням рядка без зайвих пропусків відразу ж після останнього виведеного байта. Якщо існує декілька найкоротших програм, виведіть лексикографічно найменшу. Якщо неможливо розв'язат задачу для заданого дампу та значень \textbf{sp}, виведіть єдиний рядок зі словом \textbf{IMPOSSIBLE}.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
0003 00EF
00 00 EF 00 02 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00
...
Вихідні дані #1
4
5C 0F CC 5C