#200. 拯救唐僧

拯救唐僧

Description

有一次,唐僧被恶魔白骨捕获。 白骨住在一座宫殿里,她把唐僧铐在一个房间里。 孙悟空设法进了皇宫… 但要拯救唐僧,孙悟空可能需要得到一些钥匙,并杀死蛇的方式。

宫殿可以被描述为一个人物的矩阵。 每个角色代表一个房间。在矩阵中,‘K’代表孙悟空的原始位置,‘T’代表唐僧的位置,‘S’代表一个有蛇的房间。 请注意,宫殿里只有一条“K”和一条“T”,最多有五条蛇。 ‘.’ 意思是一个干净的房间,以及 ‘#’ 意味着一个致命的房间,孙悟空无法进入。

房间里可能会有一些不同种类的钥匙散落在房间里,一个房间里最多只有一把钥匙。 最多有9种钥匙。 有钥匙的房间用一个数字(从‘1’到‘9’)表示。 例如,“1”是指带有第一类钥匙的房间,“2”是指带有第二类钥匙的房间,“3”是指带有第三类钥匙的房间…等等。 为了拯救唐僧,孙悟空必须得到各种钥匙(换句话说,每种至少有一个钥匙)。

每一步,孙悟空都可以向四个方向(北、西、南、东)移动到相邻的房间(致命的房间除外),每一步都花了他一分钟。如果他进入了一个潜逃的房间,他必须杀死蛇。 杀死一条蛇也花了一分钟。 如果孙悟空进入一个房间,那里有一个类型N的钥匙,孙会得到这个钥匙,前提是当他已经有类型 1,类型 2 和类型 N-1 的钥匙。 如果孙悟空得到了他所需要的所有钥匙,进入唐僧被铐住的房间,救援任务就完成了。 如果孙悟空没有得到足够的钥匙,他仍然可以通过唐僧的房间。孙悟空是一只不耐烦的猴子,他想尽快救唐僧。 请找出孙悟空救唐僧所需的最短时间。

Format

Input

输入一个地图,‘K’代表孙悟空的位置,也就是起点,‘T’代表唐僧的位置,数字‘1’‘2’等代表钥匙类型,‘S’ 代表蛇,’#’ 不能走,题意的目的就是孙悟空去救唐僧,要求前提必须是拿到给定的 m 种钥匙,才能去救唐僧,除了 '#‘ 的位置,其他位置都可以走(如果到达了唐僧的位置,但没拿到给定的 m 种钥匙,任务也没法完成,必须得拿到 m 钟钥匙)。到达 ‘S’ 位置,要多花一分钟杀死蛇,其他位置走一步花一分钟。

Output

问最少花多少分钟才能解救唐僧,如果不能,输出impossible。

Samples

3 1  
K.S  
##1  
1#T  
3 1  
K#T  
.S#  
1#.  
3 2  
K#T  
.S.  
21.  
0 0 
5  
impossible  
8  

Limitation

0<N<=100,0<=M<=9