Chocolate 是一种二维编程语言。以下是 Chocolate 语言的运行定义。
在 Chocolate 程序中,上下左右相邻的相同字符组成的连通块是执行单位。空格(ASCII 32)不会被执行。最先执行的块是包含左上角字符的块,如果左上角字符是空格,则程序不会运行。
块间移动
为了决定从当前块移动到下一个执行的块,存在 $DP$ 和 $CC$ 两个值。程序开始时,$DP$ 初始化为向右,$CC$ 初始化为向左。简单来说,$DP$ 表示程序的进行方向(右、下、左、上),而 $CC$ 表示朝向该方向时选择哪一侧(最左侧或最右侧)的块。给定 $DP$ 和 $CC$ 时,下一个要执行的块按如下方式决定:
- 在当前块的所有字符中,找出沿 $DP$ 方向最远处的字符。
- 在这些字符中,选择沿 $CC$ 方向最边缘的字符。
- 从该字符向 $DP$ 方向移动一格。
此时,如果移动到的格子是空格或超出了程序区域,则无法移动,此时将按如下方式改变 $DP$ 和 $CC$ 并尝试寻找可移动的格子:
- 将 $CC$ 取反(左变右,右变左)并重试。
- 如果仍然无法移动,将 $DP$ 顺时针旋转 $90$ 度并重试。
- 继续交替尝试改变 $CC$ 和 $DP$,直到找到可以移动的方向,或者尝试了全部 $8$ 种组合。
如果尝试了全部 $8$ 种组合后仍无法移动,程序将终止。这是程序终止的唯一方式。(不存在运行时错误。)
命令列表
在 Chocolate 语言中,所有数据都存储在一个栈中,栈中的元素是有符号 64 位整数。
Chocolate 语言有多种命令,每当进入一个块时,就会执行该块字符对应的命令。以下是命令列表。对于所有命令,如果无法执行(例如栈中整数不足、除以 0、没有可读入的字符等),则什么都不会发生,程序继续执行。
I:从stdin读入 1 个字符,并将其 ASCII 码压入栈中。如果没有可读入的字符,则忽略。O:从栈顶弹出一个整数,将其模 $256$ 的余数($0$ 以上 $255$ 以下的值)作为 ASCII 码对应的字符输出到stdout。P:将当前块的面积(包含的字符数)压入栈中。p:从栈顶弹出一个整数并丢弃。+:从栈顶弹出两个整数 $x$ 和 $y$,将 $y+x$ 压入栈中。-:从栈顶弹出两个整数 $x$ 和 $y$,将 $y-x$ 压入栈中。*:从栈顶弹出两个整数 $x$ 和 $y$,将 $y \times x$ 压入栈中。/:从栈顶弹出两个整数 $x$ 和 $y$,将 $\lfloor y/x \rfloor$ 压入栈中。%:从栈顶弹出两个整数 $x$ 和 $y$,将 $y\%x$ 压入栈中。该值满足 $\lfloor y/x \rfloor \times x + y\%x = y$。!:从栈顶弹出一个整数 $x$,如果 $x$ 为 $0$ 则将 $1$ 压入栈中,否则将 $0$ 压入栈中。>:从栈顶弹出两个整数 $x$ 和 $y$,如果 $y>x$ 则将 $1$ 压入栈中,否则将 $0$ 压入栈中。D:从栈顶弹出一个整数 $x$,将 $DP$ 顺时针旋转 $90$ 度的 $x$ 倍。如果 $x$ 为负数,则逆时针旋转 $-x$ 倍。C:从栈顶弹出一个整数 $x$,将 $CC$ 取反 $|x|$ 次。d:从栈顶弹出一个整数 $x$,将 $x$ 复制一份,即在栈中压入两个 $x$。r:从栈顶弹出两个整数 $x$ 和 $y$,然后将栈顶的 $y$ 个元素“旋转” $x$ 次。这里的旋转是指,将最顶端的元素移动到最底端(这 $y$ 个元素的底部),其余元素向上移动一格。如果 $x$ 为负数,则进行相反的操作 $-x$ 次。如果 $y \le 0$,或者 $y$ 大于弹出 $x$ 和 $y$ 后的栈深度,则不进行旋转操作,并将 $y$ 和 $x$ 原样压回栈中。
以下是输出 Hello World! 的 Chocolate 语言代码示例。
PPPPPPdP+*d PP dO Ppd+PPd* Od dd P -- dP OO dOPPd+ ++ P d ++ P +- P / * P PP/O d p + + P P OO O P d P P O PP p P PPO d-+dPP dPP P d+ P POPP dP +*+PdPPP PP PP P -- PO+PPOdOdO
现在,请用 Chocolate 语言解决以下问题。
输入格式
输入一个整数 $N$($1 \le N \le 100$)。输入末尾有一个换行符(ASCII 码 10)。
输出格式
输出共 $N$ 行星号(ASCII 码 42)。第 $i$ 行输出 $i$ 个星号,中间无空格。请注意,行与行之间需要输出换行符(ASCII 码 10)。
样例
输入样例 1
5
输出样例 1
* ** *** **** *****
说明
可提交的语言:Text
代码长度不能超过 524,288B。如果代码的宽度与高度的乘积超过 1,000,000,或者对于单个输入,代码在执行 1,000,000 条命令后仍未结束,则会被判定为“答案错误”(Wrong Answer)。