Автор: | Зимние сборы 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 |
|
|