编程题
### 问题描述
小齐在做了一场吃水果的梦后,发现自己置身于一个迷宫中。迷宫是一个 $N \times M$ 的方格网格。她从左上角的方格开始,想要走到右下角的方格。当小齐站在一个方格上时,她可以向上、下、左、右中的任意方向移动。
然而,每个方格都有颜色,而不同的颜色具有不同的属性,这让小齐感到头疼:
如果一个方格是红色,则无法通过。
如果一个方格是粉色,则可以正常行走。
如果一个方格是橙色,则可以正常行走,但会让小齐身上散发出橙子的味道。
如果一个方格是蓝色,则包含食人鱼,只有当小齐身上有橙子的味道时,食人鱼才会让她通过。
如果一个方格是紫色,则小齐会向该方向滑动到下一个方格(除非她无法穿越)。如果下一个方格仍为紫色,则小齐会一直滑动,直到着陆在一个非紫色方格上或撞到无法穿越的方格。紫色方格还会消除小齐身上的味道。
请帮助小齐以尽可能少的移动次数穿越迷宫。
### 输入格式
第一行包含两个整数 $N$ 和 $M$,表示迷宫的行数和列数。
接下来的 $N$ 行,每行包含 $M$ 个整数,表示迷宫的布局:
整数 $0$ 表示红色方格。
整数 $1$ 表示粉色方格。
整数 $2$ 表示橙色方格。
整数 $3$ 表示蓝色方格。
整数 $4$ 表示紫色方格。
左上角和右下角的整数始终为 $1$。
### 输出格式
输出一个整数,表示小齐穿越迷宫所需的最小移动次数,如果无法穿越则输出 $-1$。
### 样例输入
```
4 4
1 0 2 1
1 1 4 1
1 0 4 0
1 3 1 1
```
### 样例输出
```
10
```
### 评测数据规模
$1 \leq N, M \leq 1,000$。