配点 : 800 点
問題文
長さ N の非負整数列 A=(A1,A2,…,AN),B=(B1,B2,…,BN) が与えられます。
数列 A に対し以下の操作を 70000 回以下行うことで A を B に一致させられるか判定し、可能な場合は実際に操作手順を一つ示してください。
- 整数 K (1≤K≤N) を選ぶ。全ての i (2≤i≤K) について、Ai の値を Ai−1⊕Ai で置き換える。この置き換えは全ての i (2≤i≤K) に対して同時に行う。
ただしここで、⊕ はビット単位 XOR 演算を表します。
ビット単位 $\mathrm{XOR}$ 演算とは
非負整数 A,B のビット単位 XOR 演算、A⊕B は、以下のように定義されます。
- A⊕B を二進表記した際の 2k (k≥0) の位の数は、A,B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 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 回とし、i 回目の操作で選んだ整数を Ki として以下の形式で出力せよ。
Yes
M
K1 K2 … KM
条件を満たす解が複数存在する場合、どれを出力しても正解とみなされる。
3
1 2 0
1 2 3
Yes
2
2 3
この出力例では、操作によって数列 A は以下のように変化します。
- 初期状態:A=(1,2,0)
- 1 回目の操作後:A=(1,3,0)
- 2 回目の操作後:A=(1,2,3)
2 回の操作後、A と B は一致しているのでこの出力は条件を満たします。
2
10 100
1 0
No
2
1152921504606846975 0
1152921504606846975 0
Yes
0