Программирование EDSAC
Первым полномасштабным электронным цифровым компьютером в мире был EDSAC (Автоматический вычислитель на электронных линиях задержки). EDSAC имел набор команд, который работал с 17-битовыми словами (и 35-битовыми двойными словами), а также использовал 5-битовый телетайп код для ввода и вывода данных.
Программирование EDSAC совершалось при помощи простого языка ассемблера: одна буква представляла собой код операции, за которой следовал беззнаковый десятичный адрес и буква "F" (для полного слова) или "D" (для двойного слова). Например, инструкция "A 128 F" означала "добавить полное слово в ячейку 128 аккумулятора", и преобразовывалась в 17-битовый бинарный код 11100000100000000, состоящий из 5-битового кода операции (11100="add"), 11-битового операнда (00010000000 = 128), и одного 0 бита указывающего на операцию над полным словом (1 бит указывал на операцию над двойным словом).
И хотя арифметика в EDSAC была с фиксированной точкой, это была не просто целочисленная арифметика (как в обычных современных машинах). Считалось, что десятичная точка в EDSAC аппаратно находится между самым левым битом и битом справа от него. Таким образом, аппаратно можно было оперировать только на значениях в промежутке -1.0 ≤ x < 1.0. Например:
Как можно заметить, наибольшее возможное положительное значение равно:
01111111111111111 = 0.9999847412109375
а наименьшее возможное положительное значение равно:
00000000000000001 = 2^{-16} = 0.0000152587890625
(оно также равно прирасту между двумя последовательными значениями в EDSAC).
По любопытному совпадению (или элегантному дизайнерскому решению), код операции прибавления (11100) совпадал с кодом буквы "A" телетайпа. Код операции вычитания совпадал с кодом буквы "S" (01100) телетайпа и так далее. Это упрощало программирование под ассемблер (команды которого состояли всего лишь из 31 инструкции). Алфавит телетайпа EDSAC был "PQWERTYUIOJ#SZK*?F@D!HNMLXGABCV" (где "P"=00000, "Q"=00001, и так далее до "V"=11111).
К несчастью, ассемблер EDSAC не имел специальных директив для обработки данных. С другой стороны, не было никаких оснований, что обычные команды не могут для этого использоваться. Поэтому программист EDSAC, желая зарезервировать место под константу 3/4 (представляемую как 01100000000000000), использовал инструкцию "S O F" а под 1/3 (представляемую приблизительно как 00101010101010101) "T 682 D", и так далее.
Вам следует написать программу, которая преобразует десятичные значения в соответствующие команды EDSAC.
Входные данные
Первая строка содержит одно целое число P (1 ≤ P ≤ 1000) - количество тестов. Каждый тест представляет собой одну строку и содержит два числа N и D. N представляет собой номер теста. D - десятичное значение в виде sd.ddd...., где s - необязательный знак минус, а d - любая из десятичных цифр (0-9). После десятичной точки присутствует как минимум 1 и не более 16 цифр.
Выходные данные
Для каждого теста вывести одну строку. Она должна содержать номер теста (N), пробел и команду EDSAC, достаточную для задания указанной константы. Команду следует выводить следующим образом: символ кода операции "opcode", пробел, операнд (неотрицательное десятичное целое), пробел и символ 'F' или 'D' (по мере необходимости). Если константу нельзя точно представить 17 битами, то значение следует округлить в сторону нуля (вверх для отрицательных и вниз для положительных чисел). Если значение D не лежит в промежутке -1.0 ≤ D ≤ 1.0, то следует вывести строку "INVALID VALUE" вместо команды EDSAC.