迷宫
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小王最近迷上了一款走迷宫游戏,这款走迷宫游戏在一个三维空间中运行,玩家在迷宫中可以通过操作手柄,每次进行上、下、左、右、前、后6个方向的移动。游戏进行过程中会出现以下两种操作中的一种:

1 x y z在迷宫的位置C(x,y,z)开放一个新的出口(原有的出口依然可用)。

2 x y z玩家出现在这个迷宫的位置Q(x,y,z)处。

对于每次操作2,玩家需要通过操作最少次数的手柄去到达一个出口,离开迷宫,输出此时的最少操作次数。

(保证第一次操作一定是操作1,也就是保证一定有出口)

输入描述:

给定一个t,代表t组测试数据。(1<=t<=12)

每组测试数据在一行给定一个n,m,h,q。(1<=n*m*h<=1e5,∑n*m*h<=5e5,1<=q<=1e5)

接下来q行,每行给定op,x,y,z。(1<=op<=2,1<=x<=n,1<=y<=m,1<=z<=h)

输出描述:

每组测试数据,针对每个操作2,输出最少操作手柄的次数。

示例1

输入

复制
1
5 5 5 5
1 3 3 3
2 3 3 2
1 2 2 2
2 1 1 1
2 5 4 3

输出

复制
1
3
3