CF908B New Year and Buggy Bot

题目描述

Bob 编程控制一个机器人在二维迷宫中导航。 迷宫中有一些障碍物。空地用字符 '.' 表示,障碍物用 '#' 表示。 迷宫中有且仅有一个机器人,起始位置用字符 'S' 表示,该位置无障碍物。迷宫中还有且仅有一个出口,出口位置用字符 'E' 表示,该位置无障碍物。 机器人只能向上、下、左、右四个方向移动。 Bob 编写程序时,记录了一串由数字 $0$ 到 $3$ 组成的数字字符串。他本意是让每个数字分别对应一个不同的方向,机器人依次按字符串中的数字指令移动以到达出口。不幸的是,他忘记了具体将哪些数字映射到哪些方向。 机器人将随机选择一种数字到方向的映射方式,并且确保不同数字对应不同方向。然后,机器人将按照给定的字符串顺序和选定的映射依次行动。如果某一步会让机器人越出迷宫边界或撞上障碍物,机器人就会当场崩溃。如果机器人在任何一步到达出口,则会立即停止执行后续指令。 Bob 遇到了调试困难。他想知道,有多少种数字到方向的映射方式能使机器人到达出口。

输入格式

第一行输入两个整数 $n$ 和 $m$($2 \leq n, m \leq 50$),表示迷宫的尺寸。 接下来 $n$ 行,每行恰好 $m$ 个字符,表示迷宫的情况。 每个迷宫字符可以是 '.'、'#'、'S' 或 'E'。 迷宫中恰有一个 'S' 和一个 'E'。 最后一行输入一个仅由数字 $0$ 到 $3$ 组成的字符串 $s$($1 \leq |s| \leq 100$),表示机器人收到的指令。

输出格式

输出一个整数,表示有多少种数字到方向的映射方式能够使机器人到达出口。

说明/提示

对于第一个样例,只有一种合法的映射方式,如下图所示,$D$ 表示下、$L$ 表示左、$U$ 表示上、$R$ 表示右。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF908B/4c40549367cb1d718a2322ebe6b5a9600149483b.png) 由 ChatGPT 5 翻译