Thor 向矮人们吹嘘说,他仅凭一个小火把就能在没有任何魔法帮助的情况下穿过任何迷宫。矮人们决定考验一下 Thor。他们是快速而熟练的建造者,他们建造的新迷宫既庞大又棘手。如果冒险者在里面走得太久,火把就会熄灭,矮人们就会嘲笑这位“王牌”。在看了一眼新建筑后,Thor 决定无论付出什么代价都要获胜,于是他向 Loki 寻求帮助。
Loki 是一个足智多谋的恶作剧者,他能在迷宫建成后立即获得迷宫地图。但他不能直接把地图给 Thor:矮人们肯定会识破这种欺骗。Thor 只能从 Loki 那里得到一个简短的提示……
帮助 Thor 和 Loki 准备传递提示,以便 Thor 能够在火把熄灭前走出迷宫。
迷宫结构
矮人们建造的迷宫可以看作是一个 $n \times n$ 的方格棋盘。在每两个水平或垂直相邻的方格之间,要么是通道,要么是墙壁。此外,整个迷宫被墙壁包围。入口在左下角的方格,出口在右上角的方格。
矮人们建造墙壁的方式如下:他们以随机顺序考虑迷宫内所有可能的墙壁位置,每个位置恰好一次。在每一个这样的位置,如果竖起一堵墙后,仍然可以从迷宫的每一个方格移动到其他任何方格,他们就会竖起这堵墙。
在文本形式中,迷宫由 $2n + 1$ 行给出,每行包含 $2n + 1$ 个字符。从 1 开始计数,偶数行和偶数列对应方格,奇数行和奇数列对应它们之间的墙壁。“.”字符对应一个方格或通道,“#”字符对应一堵墙或墙壁之间的连接点。特别地,偶数行和偶数列上的字符始终是点(即方格),奇数行和奇数列上的字符始终是井号(即墙壁之间的连接点)。
下方的样例中可以看到一个 $5 \times 5$ 迷宫的地图表示。此外,为了方便本地测试,您可以从测试系统的“Samples ZIP”中下载所有奇数编号测试点的迷宫。
交互
在本题中,您的程序在每个测试点上将被运行两次。
在第一次运行中,程序获取地图并以 Loki 的身份写入提示。第一行包含单词 “view”。第二行包含一个整数 $n$,即迷宫的大小($5 \le n \le 200$)。接下来的 $2n + 1$ 行,每行包含 $2n + 1$ 个字符。这些行共同构成了迷宫的地图。
程序必须打印一行:Loki 将发送给 Thor 的提示。该提示必须由数字 0 和 1 组成,长度在 0 到 1000 个字符之间。
在第二次运行中,程序获取提示并以 Thor 的身份在迷宫中行走。此运行是交互式的。第一行包含单词 “walk”。第二行包含 Loki 给 Thor 的提示:即程序在第一次运行中打印的提示。第三行包含整数 $n$,即迷宫的大小,与第一次运行相同。
此后,程序将获得 Thor 在火把帮助下看到的迷宫片段,并应以 Thor 下一步的方向作为响应。迷宫的每个片段由三行组成,每行包含三个字符:Thor 所在的迷宫方格及其周围环境。
如果程序确定 Thor 已经走出了迷宫并站在出口处,则应直接正常终止。否则,它必须打印一行包含 Thor 下一步的方向:“N”表示向北走(地图上方),“W”表示向西走(地图左方),“S”表示向南走(地图下方),或“E”表示向东走(地图右方)。之后,程序应刷新输出缓冲区:例如,在 C 或 C++ 中调用 fflush(stdout),在 Java 中调用 System.out.flush(),或在 Python 中调用 sys.stdout.flush()。
如果通道畅通,Thor 会向请求的方向移动到相邻方格,并获得他此时看到的下一个迷宫片段。如果请求的方向上有墙,则过程以 “Wrong Answer” 结果终止。
如果 Thor 在站在出口时正常终止,并且在此之前最多走了 6000 步,则程序通过该迷宫。
样例
在每个测试点上,第二次运行的输入取决于程序在第一次运行时的输出。在样例中,我们将考虑一种通过简单地打印所需步骤序列来形成提示的程序:0 表示向东走,1 表示向北走。当然,这种程序并不总是有效。
该程序在第一个测试点上的两次运行如下所示。在第二次运行中,添加了空行以显示事件序列。
样例 1
view 5 ########### #.#.......# #.###.##### #.#.....#.# #.#.###.#.# #...#.....# ###.####### #.........# ###.####### #.........# ###########
10001011
walk 10001011 5 ### #.. ### #.# ... ### #.# ... #.# #.# ..# #.# ### #.. #.# #.# ... ### ### ... #.# ### ... ### ### ..# ###
E N N N E N E E