× 如果遇到编译错误信息中包含大量 \"5MhZ4\" 之类,请更换最新 Chrome/Firefox/Edge 浏览器再试

Hanoi

Accepts: 0
Submissions: 40
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 262144/262144 K (Java/Others)
Problem Description
X 同学自从学会了汉诺塔游戏之后就非常沉迷。汉诺塔游戏由三根柱子(标号为0、1、2)和一堆体积不同的圆盘组成。每根柱子上有一些圆盘。如果每根柱子上的圆盘体积都满足从上到下依次增大,那么称之为合法状态,否则为非法状态。从一个状态出发,可以将一个柱子最顶端的圆盘移到另一根柱子上,若移动之后仍是合法状态,则称这一步移动为“合法的”。现在给定合法的起始状态和结束状态,我们需要通过一系列“合法的”步骤将起始状态变换至结束状态。由于移动每一步都需要体力,X 同学想寻找移动步数最少的方案(最优方案)。特别地,X 同学对于最优方案下移动了 $k$ 次盘子之后的局面感兴趣,但怎么也玩不好这个游戏,于是来咨询你。
Input
第一行一个整数 $T(1 \leq T \leq 20)$,表示测试用例组数。 每组测试用例的第一行有两个整数 $n(1\leq n\leq 10^5)$ 和 $k(0 \leq k \leq 10^{18})$,表示有 $n$ 个圆盘,圆盘的体积分别为 $1,2,\ldots,n$。$k$ 如上述。 接下来一行表示起始状态,含 $n$ 个整数,第 $i$ 个整数表示体积为 $i$ 的圆盘一开始所在的柱子。 接下来一行表示结束状态,含 $n$ 个整数,第 $i$ 个整数表示体积为 $i$ 的圆盘最终所在的柱子。 可以证明给定每个圆盘所在的柱子后,只存在唯一一种合法状态。数据保证最优方案唯一,$k$ 不大于最优方案移动总步数。
Output
输出 $T$ 行整数。 对每组测试用例,输出一行共 $n$ 个整数,第 $i$ 个整数表示体积为 $i$ 的圆盘在最优方案下移动了 $k$ 步之后所在的柱子编号。
Sample Input
1
3 1
0 0 1
1 1 1
Sample Output
2 0 1