阿杰和他的盲人邻居
题号:NC202984
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

    阿杰的家住在一个地形复杂的网红城市——重庆。

    这个城市不仅道路崎岖扭转,连普通的居民楼内部都神似迷宫,比如阿杰所居住的那栋楼。

    对于有眼睛的正常人来说,走迷宫问题不是很大,至少,你能看见路,能按照任意你心想的方向前进。但是对于盲人来说,就不是了,他们看不见路,只能用手扶着墙前行。

    阿杰的某位邻居就是一位盲人,每次出行前往电梯口都是如此的费劲,阿杰十分想帮助他,但是bit距离阿杰的家有整整公里,所以没办法每次扶他前往电梯口。

    于是阿杰决定告诉他的邻居用左手扶墙靠着左手沿墙走(即保证前进方向的左边一定有墙,若周围均没有墙,则向左转弯)到达电梯口所需步数更少还是用右手扶墙靠着右手沿墙走(即保证前进方向的右边一定有墙,若周围均没有墙,则向右转弯)到达电梯口所需步数更少。同时,阿杰也想知道,对于一个双目可见的正常人而言,从邻居家到达电梯口所需要的最少步数是多少。

    当然,阿杰已经将他家楼层的平面图用一个的字符串表示出来了。其中"#"代表墙,"."代表可以通行的道路,"S"代表邻居的家所在的位置,"E"代表电梯口所在位置。

    阿杰的邻居不是魔法师,所以他不能穿墙(当然,正常人也不能),而且在这个图上,每个人都只能沿着上,下,左,右四个方向移动,不能斜着移动。

    注意,离开起点和到达终点仍然要计算步数(具体情况可参考样例), 保证数据有解(即起点S周围一定有墙且前进方向唯一,不会走出边界,边界可当成墙处理)。

输入描述:

输入数据包含若干行。

其中第一行包含两个整数分别表示整个图形的列数和行数。

接下来行,每行个字符,具体含义见上述题目描述。

输出描述:

输出数据共行,每行一个整数。

第一行一个整数,表示邻居用左手扶墙到达电梯口所需要的步数。

第二行一个整数,表示邻居用右手扶墙到达电梯口所需要的步数。

第三行一个整数,表示从邻居家到达电梯口的最短路径。

示例1

输入

复制
8 8
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#...#..#
#S#E####

输出

复制
37
5
5
示例2

输入

复制
9 5
#########
#.#.#.#.#
S.......E
#.#.#.#.#
#########

输出

复制
17
17
9