#P16651. [Ukiepc2016]Compiler

[Ukiepc2016]Compiler

题目描述

几乎所有计算机都有一个共同点:无论是简单的栈式计算器、使用 6502 处理器的 BBC Micro,还是最新的 Android 手机,都需要某种程序把高级语言或汇编语言转换成机器代码。

UKIEPC 最近设计了一款自己的处理器。这款处理器很容易装载程序,但功能并不复杂,因为它只有一个目标:在一块创新的激光显示板上显示一个数字。

处理器拥有以下存储空间:

  • 三个 8 位寄存器:AXY
  • 一个容量无限的栈。

程序开始运行时,三个寄存器中的值均为未知值,栈为空。

处理器支持以下六类指令:

  • PH <reg>:把寄存器 <reg>AXY)中的值压入栈中。
  • PL <reg>:弹出栈顶元素并存入寄存器 <reg>。如果执行该指令时栈为空,程序立即终止。
  • AD:从栈中弹出两个值,将它们的和的最低 8 位压回栈中。换言之,加法结果对 256256 取模。
  • ZE <reg>:把寄存器 <reg> 设为 00
  • ST <reg>:把寄存器 <reg> 设为 11
  • DI <reg>:把寄存器 <reg> 中的值发送到激光显示板,并立即退出程序。

由于存储空间有限,磁盘中最多只能保存 40 条指令。第 40 条之后的任何指令都不会被执行。

给定一个数,请输出一段程序,使处理器能够在显示板上显示该数。

输入格式

一行一个整数 NN0N2550\le N\le 255),表示需要显示的数字。

输出格式

输出不超过 40 行,每行包含一条合法指令。

这些指令按顺序执行后,必须输出数字 NN。最后一条实际执行的指令必须是 DI 指令。

判题说明: 本题为构造题,需要特殊判题程序检查所输出指令是否合法以及执行结果是否为 NN

样例 1

输入

2

输出

ST A
ST X
PH A
PH X
AD
PL Y
DI Y

样例 2

输入

5

输出

ST X
PH X
PH X
PH X
AD
PL Y
PH Y
PH Y
AD
AD
PL A
DI A