停止問題
题意翻译
【题目描述】
Defunge 程序由一个 $R$ 行 $C$ 列的字符数组组成。下面是一个 Defunge 程序的例子:
```plain
6>--v.
.^--_@
```
Defunge 程序从程序的左上角(即第一行第一列)开始执行。**它的执行方向一开始为"右"**,每次朝着执行方向走一步,**如果走出界了,要跳到另一边**。每走到一个格子上,就要执行这个格子上的命令。 Defunge 程序还有一个存储器,这个存储器只能存储 $[0,15]$ 的一个整数,**存储器一开始存储** $\bold{0}$。
在 Defunge 程序中,有且只有 $11+10=21$ 种命令,下面是它们各自的含义:
- `<`:把执行方向设置为"左"。
- `>`:把执行方向设置为"右"。
- `^`:把执行方向设置为"上"。
- `v`:把执行方向设置为"下"。
- `_`:如果存储器存储的数字是 $0$,就把执行方向设置为"右",否则设置为"左"。
- `|`:如果存储器存储的数字是 $0$,就把执行方向设置为"下",否则设置为"上"。
- `?`:把执行方向设置为"上下左右"中的**任意**一个(类似于 dfs 把四个方向全搜一遍)。
- `.`:什么也不做。
- `@`:停止程序。
- `0`-`9`:把存储器设置为这个字符表示的数值。
- `+`:让存储器的数值加 $1$。注意当存储器的数值为 $15$ 时要把它设为 $0$。
- `-`:让存储器的数值减 $1$。注意当存储器的数值为 $0$ 时要把它设为 $15$。
现在,给你一个 Defunge 程序,请判断这个程序是否能停止(即执行到命令`@`)。如果能,输出`YES`,否则输出`NO`。
【输入格式】
第一行两个正整数 $R,C$,表示这个 Defunge 程序有 $R$ 行 $C$ 列。
接下来 $R$ 行,每行有 $C$ 个字符,描述这个 Defunge 程序。
【输出格式】
一行字符串`YES`或`NO`,表示这个程序是否能停止。
【样例】
样例输入 $1$:
```plain
2 6
6>--v.
.^--_@
```
样例输出 $1$:
```plain
YES
```
样例输入 $2$:
```plain
2 6
5>--v.
.^--_@
```
样例输出 $2$:
```plain
NO
```
样例输入 $3$:
```plain
2 6
.>--v.
.^--?@
```
样例输出 $3$:
```plain
YES
```
【数据范围】
$1\leq R,C\leq 20$,保证程序里只有上文提到的 $21$ 种命令。
题目描述
[problemUrl]: https://atcoder.jp/contests/utpc2011/tasks/utpc2011_4