编程题
### 问题描述
"回家之路" 是一款新推出的角色扮演游戏,在游戏中,你的角色被放在一个 $n \times m$ 的矩阵迷宫中,每一个格子代表一个位置,位置可能是平地(表示为 $.$),障碍物(表示为 $\\#$),或者是一个传送门(表示为字母 $A$ 至 $Z$ 中除去 $S$ 和 $E$ 的其他大写字母)。
角色需要从起点 $S$(有且只有一个)移动到终点 $E$(有且只有一个)。每次只能上下左右移动到相邻的格子。如果走到传送门,则下一步可以选择传送到其他的相同字母的传送门上(也要计算一次移动),也可以选择不传送。角色不能走进障碍物格子。
你的任务是编写一个程序,找出从起点到终点的最短路径。如果无法到达,输出 $-1$。
### 输入格式
第一行输入两个整数 $n$ 和 $m$,$(1 \leq n, m \leq 1000)$,代表矩阵的行数和列数。
接下来的 $n$ 行:每行一个长度为 $m$ 的字符串,表示迷宫的布局。
### 输出格式
一个整数,表示从起点到终点的最短路径的长度,如果无法到达终点,输出 $-1$。
### 样例输入
```
5 5
SA...
..B#.
.....
.#...
..A.E
```
### 样例输出
```
4
```
### 测评数据规模
$1 \leq n, m \leq 1000$。