题目描述
给定两个长度为N的非负整数序列:A=(A1,A2,…,AN)和B=(B1,B2,…,BN)。
判断是否可以通过最多进行 70000 次以下操作将A变为B。如果可以,请给出一种特定的操作序列。
- 选择一个整数 K (1≤K≤N)。对于每个整数 i (2≤i≤K),同时用Ai−1⊕Ai替换 Ai 的值。
这里,oplus表示按位异或。
什么是按位异或?
非负整数A和B的按位异或,A⊕B,定义如下:
- 当用二进制表示A⊕B时,2k位置上的数字(k≥0)为1,当且仅当A和B在该位置的数字恰好有一个为1,否则为0。
例如,3⊕5=6 (二进制表示:011⊕101=110)。
约束条件
- 2≤N≤1000
- 0≤Ai,Bi<260
- 输入中的所有值都为整数。
输入
输入以以下格式从标准输入给出:
N
A1 A2 … AN
B1 B2 … BN
输出
如果无法在最多70000次操作中使A等于B,则打印“No
”。如果可以,请以以下格式打印实现这一目标的操作序列,其中M是操作次数,Ki是第i次操作选择的整数:
Yes
M
K1 K2 … KM
如果存在多个解,则可以接受任意解。
示例输入1
3
1 2 0
1 2 3
示例输出1
Yes
2
2 3
在此输出中,序列A的变化如下:
- 初始状态:A=(1,2,0)。
- 第一次操作后:A=(1,3,0)。
- 第二次操作后:A=(1,2,3)。
经过两次操作,A和B变得相等,达到了目标。
示例输入2
2
10 100
1 0
示例输出2
No
示例输入3
2
1152921504606846975 0
1152921504606846975 0
示例输出3
Yes
0