#502. 异或

异或

问题背景

小方最近新学了一些有趣的数学知识——异或,于是就来考考他的朋友小谢,你能帮小谢解答一下吗?

十进制 5 的二进制为 101;

十进制 0 的二进制为 0;

所以 50=55 \oplus 0 = 5,异或运算过程如下:

问题描述

现有两个整数 aa 和 bb,你可以进行任意次数(包括 00 次)的如下操作:挑选一个整数 xx,要求 (0x(0 \leq x \leq 当前的 aa 值)(注意这里的 aa 是操作时的当前值,不是最初给定的初始值);随后将 aa 更新为 aa 和 xx 的按位异或结果(即 (a:=ax)(a := a \oplus x),其中 ()(\oplus) 表示按位异或操作)。你的目标是通过一系列这样的操作,让 aa 最终恰好等于 bb。请找出一个操作方案,使得操作次数不超过 100100 次;如果不存在这样的方案,就输出 1-1

输入格式

首先输入一个整数 tt ,表示测试用例的数量。

每个测试用例包含两个整数 aa 和 bb

输出格式

对于每个测试用例:

如果无法通过允许的操作将 aa 变为 bb,输出 1-1

否则,第一行先输出一个整数 kk 0k100(0 \leq k \leq 100)表示操作次数,然后接下来第二行再输出 k 个整数 x1,x2,,xkx_1, x_2, \dots, x_k,表示每次操作选择的 x 的值(顺序为操作执行顺序)。若有多个可行方案,输出任意一个即可。

输入样例

6
9 6
13 13
292 929
405 400
998 244
244 353

输出样例

2
7 8
0
-1
1
5
2
25 779
-1

评测数据规模

对于所有评测数据,1t1031 \leq t \leq 10^3 ,1a,b1091 \leq a, b \leq 10^9