U180518 找金币

题目背景

锣鼓(没错)的服务器爆炸了!由于没有钱维修,你作为三好员工,只能去收集钱了。

题目描述

你打算挑战大名鼎鼎的一些迷宫。你需要分析出最好的路线。当然由于迷宫实在太多了,这时候你就得写程序求解。 `X` 代表墙壁。 `#` 代表可以通过的路。 `$` 代表1个金币。 `S` 代表开始点。只有一个起点。 `E` 代表出口。只有一个出口。 `*` 代表锤子,你可以使用一个锤子砸开一个墙壁。你最多持有`1` 个锤子。 你需要求出,对于每个迷宫,能不能通过;如果可以,那么请输出最多能拿到的金币。注意,你不能多次通过一个地方。

输入格式

第一行一个整数 $t$ ,代表数据组数。 接下来 $t$ 组:第一行每行两个整数 $n,m$ 。 接下来 $n \times m$ 的矩阵描述迷宫。

输出格式

对于每个迷宫,如果不能通过输出一行 `NO` ,否则输出一个 `YES`,空格输出最大金币数。

说明/提示

|测试点编号 |$m,n$ |$t$ |特殊限制 | 分值| | :-----------: | :-----------: | :-----------: | :-----------: | :-----------: | |$1\sim3$ | $\le 3$ | $=1$ | A | 2| |$4\sim5$ | $\le3$ | $=1$ | B | 2| |$6\sim8$ |$\le3$ | $=1$ | C |2| |$9\sim14$ |$\le6$ | $\le4$ | 无 |2| |$15\sim17$ |$\le6$ | $\le4$ | 无 |2| |$18\sim 20$ |$\le 6$ | $\le4$ | A |2| | $21$ | $\le6$ | $\le4$ | B |2| | $22\sim 30$ | $\le 8$ | $\le 4$ | 无 |2| | $31\sim 40$ | $\le9$ | $\le 4$| 无|3| | $41\sim 44$ | $\le9$| $\le8$| C|2| | $45$ | $\le114^{514}$| $\le1919^{810}$| D|2| A:没有墙壁。 B:没有锤子。 C:没有金币。 D:没有迷宫。 保证有 $30\%$ 的数据,最优路径长度 $\le15$。