#524. 起火迷宫

起火迷宫

问题描述

一个迷宫可以看作一个 RRCC 列的方格矩阵。 其中一些格子是空地,用 . 表示,其他格子是障碍,用 # 表示。开始时,乔位于一个空地格子中(用 J 表示)。迷宫中有一些空地已经起火(用 F 表示),且火尚未蔓延到乔所在的位置。

乔每单位时间可以向上下左右四个方向移动一格(不能进入障碍格 #)。火每单位时间也会蔓延到相邻的上下左右空地(同样被障碍阻挡)。如果一个格子已经着火,或者在乔进入该格子的时刻恰好着火,则该格子对乔来说是危险的,乔不能进入该格子。

当乔进入任意位于边界的空地格子时,他可以再花费 11 个单位时间直接逃出迷宫(即到达边界的下一时间步视作逃脱成功)。求乔逃离迷宫所需的最少时间;如果无法逃离,输出 IMPOSSIBLE

输入格式

  • 第一行包含两个整数 R,CR, C1R,C10001 \le R, C \le 1000)。
  • 接下来 RR 行,每行包含 CC 个字符,表示迷宫地图。字符集仅包含 #.JF。地图中恰有一个 J(乔),可能有多个 F(火源)。

输出格式

  • 若乔可以逃离迷宫,输出一个整数,表示逃离所需的最少时间;
  • 否则输出 IMPOSSIBLE(大写字母)。

样例输入1

4 4
####
#JF#
#..#
#..#

样例输出1

3

样例输入2

3 3
###
#J.
#.F

样例输出2

IMPOSSIBLE