密室逃脱
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 64 M,其他语言128 M
64bit IO Format: %lld

题目描述

小明没有打过校赛但是他被拉去出题了。他非常想打校赛,但是他现在被困到了迷宫出题,现在请你帮小明逃离出题现场。该迷宫由`n * m`个格子组成的迷宫,有些格子是陷阱,用'#'表示,小明进入陷阱就会死亡,'.'表示没有陷阱。小明所在的位置用'S'表示,目的地用'T'表示。

小明只能向上下左右相邻的格子移动,每移动一次花费1秒。

有q个双向传送阵,每个传送阵各有两个口,都在迷宫的格子里,当走到或被传送到一个有传送阵的格子时,小明可以选择是否开启传送阵。如果开启传送阵,小明就会被传送到传送阵的另一端的格子里,这个过程会花费3秒;如果不开启传送阵,将不会发生任何事情,小明可以继续向上下左右四个方向移动。

一个格子可能既有多个传送阵,小明可以选择任意一个开启传送阵。使用传送阵是非常危险的,因为有的传送阵的另一端在陷阱里,如果小明使用这样的传送阵,那他就会死亡。请告诉小明活着逃离出题现场的最短时间。

输入描述:

第一行有三个整数n,m,q(2≤ n,m ≤300,0≤ q ≤1000)。
接下来是一个n行m列的矩阵,表示迷宫。其中第i(1≤i≤n)行第j(1≤j≤m)列对应地图上[i-1,j-1]的位置
最后q行,每行四个整数x1,y1,x2,y2(0≤ x1,x2< n,0≤ y1,y2< m),表示一个传送阵的一端在x1行y1列,另一端在x2行y2列。

输出描述:

如果小明能够活着逃离出题现场,则输出最短时间,否则输出-1。
示例1

输入

复制
5 5 1
..S..
.....
.###.
.....
..T..
1 2 3 3

输出

复制
6