#CF2138A. 蛋糕分配

蛋糕分配

题目描述

巧克拉(Chocola)和凡妮拉(Vanilla)都喜欢蛋糕。 今天,蛋糕店的店长给了她们一共 2k+12^{k+1} 块蛋糕。最开始蛋糕被平分了,所以两人一开始各有 2k2^k 块蛋糕。

现在她们想要重新分配蛋糕,使得巧克拉最终恰好有 xx 块蛋糕,凡妮拉得到剩下的 2k+1x2^{k+1}-x 块蛋糕。

每一步操作中,她们只能执行下面两种操作之一:

  1. 巧克拉把自己当前蛋糕数的一半给凡妮拉。只有当巧克拉当前拥有偶数块蛋糕时,该操作才允许执行。
  2. 凡妮拉把自己当前蛋糕数的一半给巧克拉。只有当凡妮拉当前拥有偶数块蛋糕时,该操作才允许执行。

你需要求出达到目标分配方案所需的最少操作次数,并输出任意一组达到最少步数的合法操作序列。

题目保证在给定限制下一定存在合法解,且最少操作次数不超过 120120


输入格式

每个测试包含多组数据。 第一行输入测试用例数量 tt1t10001\le t\le 1000)。

每组测试用例格式如下: 第一行包含两个整数 kkxx1k60, 1x2k+111\le k\le 60,\ 1\le x\le 2^{k+1}-1)。 含义:两人初始各有 2k2^k 块蛋糕,xx 是巧克拉最终需要拥有的蛋糕数量。


输出格式

对于每组测试用例:

  1. 第一行输出一个整数 nn0n1200\le n\le 120),表示最少操作次数。
  2. 第二行输出 nn 个整数 o1,o2,,ono_1,o_2,\dots,o_n,其中:
    • oi=1o_i=1:第 ii 步执行操作 1(巧克拉分一半给凡妮拉)
    • oi=2o_i=2:第 ii 步执行操作 2(凡妮拉分一半给巧克拉)

样例输入

4
2 3
2 4
3 7
2 5

样例输出

2
2 1 
0

3
2 2 1 
2
1 2 

样例解释

第一个测试用例: 总蛋糕数 23=82^{3}=8,初始状态 {4,4}\{4,4\},目标巧克拉有 33 块,凡妮拉有 55 块。 操作过程:

$$\{4,4\}\xrightarrow{o_1=2}\{6,2\}\xrightarrow{o_2=1}\{3,5\} $$

第二个测试用例: 巧克拉已经有 44 块,无需操作,直接输出 00

第三个测试用例: 初始 {8,8}\{8,8\},目标巧克拉 77 块,凡妮拉 99 块。

$$\{8,8\}\xrightarrow{o_1=2}\{12,4\}\xrightarrow{o_2=2}\{14,2\}\xrightarrow{o_3=1}\{7,9\} $$