迷宫里放着一块蛋糕,你非常想吃掉它。你有一张迷宫的地图,它是一个 $R$ 行 $C$ 列的网格。每个网格单元格包含以下字符之一:
#(井号)表示墙壁。.(点)表示空地。S(大写字母 S)表示你当前所在位置的空地。C(大写字母 C)表示放有蛋糕的空地。
你只能在空地上行走,并且只有当两个空地共享一条边时,才能从一个空地移动到另一个空地。此外,地图上描绘的矩形区域完全被墙壁包围。
为了更快地到达蛋糕所在的位置,你从 Aperture Science™ 获得了一把传送枪,其工作原理如下。在任何时候,它都可以向四个方向(上、左、下、右)之一发射传送门。当向某个方向发射传送门时,它会沿着该方向飞行,直到遇到第一面墙。当发生这种情况时,传送门将在墙壁朝向你的那一侧生成。
在任何给定时间,最多只能存在两个传送门。如果迷宫中已经放置了两个传送门,那么在再次使用传送枪时,其中一个(由你选择)将立即消失。向已有的传送门发射传送门会将其替换(墙壁的每一侧最多只能有一个传送门)。请注意,同一面墙的不同侧面可以放置两个传送门。
一旦在迷宫中放置了两个传送门,你就可以利用它们进行传送。当你站在其中一个传送门旁边时,你可以走进它,并出现在另一个传送门旁边的空地上。这样做所花费的时间与在两个相邻格子之间移动的时间相同。
你可以认为发射传送门不消耗时间,在两个相邻格子之间移动或通过传送门传送需要 $1$ 个单位的时间。
任务
给定迷宫的地图、你的起点位置以及蛋糕的位置,计算你到达蛋糕所需的最小可能时间。
输入格式
输入的第一行包含两个整数:地图的行数 $R$ 和列数 $C$。
接下来的 $R$ 行描述地图。这些行中的每一行都包含 $C$ 个字符:#、.、S 或 C(其含义如上所述)。
保证字符 S 和 C 在地图中各恰好出现一次。
输出格式
输出应包含一个整数——从起点到达蛋糕所需的最小时间。
你可以假设从起点可以到达蛋糕。
样例
输入样例 1
4 4 .#.C .#.# .... S...
输出样例 1
4
说明 1
一种最快的移动序列如下:
- 向右移动。
- 向右移动,向上发射一个传送门,向下发射一个传送门。
- 穿过下方的传送门。
- 向右移动一格并到达蛋糕。
子任务
- 子任务 1(11 分):$1 \le R \le 10$,$1 \le C \le 10$。
- 子任务 2(20 分):$1 \le R \le 50$,$1 \le C \le 50$。
- 子任务 3(20 分):$1 \le R \le 200$,$1 \le C \le 200$。每个空地都至少与一个墙壁相邻。
- 子任务 4(19 分):$1 \le R \le 200$,$1 \le C \le 200$。
- 子任务 5(30 分):$1 \le R \le 1000$,$1 \le C \le 1000$。