Задача B. Две инструкции

Автор:Зимние сборы 2005   Ограничение времени:2 сек
Входной файл:2instr.in   Ограничение памяти:64 Мб
Выходной файл:2instr.out  

Условие

Возможно, самой важной инструкцией процессора 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.

Примеры тестов

Входной файл (2instr.in) Выходной файл (2instr.out)
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
предыдущая строчка повторяется ещё 4094 раза
4
5C 0F CC 5C

0.086s 0.037s 15