問題文
正整数 N および、2N 項からなる数列 A=(A0,A1,ldots,A2N−1) が与えられます。ここで各 Ai は 0 以上 2N−1 以下の整数であり、ineqj ならば AineqAj が成り立ちます。
あなたは数列 A に対して、次の 2 種類の操作を行うことができます:
- 操作 +:すべての i に対して、Ai を (Ai+1)bmod2N に変更する。
- 操作 oplus:0 以上 2N−1 以下の整数 x を選ぶ。すべての i に対して Ai を Aioplusx に変更する。
ただしここで、oplus はビット単位 mathrmXOR 演算を表します。
ビット単位 mathrmXOR 演算とは
非負整数 A,B のビット単位 mathrmXOR 、AoplusB は、以下のように定義されます。
- AoplusB を二進表記した際の 2k (kgeq0) の位の数は、A,B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3oplus5=6 となります (二進表記すると: 011oplus101=110)。
あなたの目的は、すべての i に対して Ai=i が成り立つようにすることです。目的を達成することが可能であるかを判定してください。本問題の制約下では、目的を達成することが可能な場合には、操作回数を 106 回以下にできることが証明できます。そのような操作列を出力してください。
制約
- 1leqNleq18
- 0leqAileq2N−1
- ineqj ならば AineqAj
入力
入力は以下の形式で標準入力から与えられます。
N
A0 A1 ldots A2N−1
出力
すべての i に対して Ai=i が成り立つようにすることが可能ならば Yes
、そうでなければ No
を出力してください。
Yes
の場合には、さらに目的を達成するための操作列を次の形式で出力してください。
K
x1 x2 ldots xK
ここで K は操作の回数を表す非負整数で、0leqKleq106 を満たす必要があります。また、xi は i 回目の操作を表す整数で、
- i 回目に操作 + を行う場合には、xi=−1
- i 回目に操作 oplus を行う場合には、xi はその操作で選ぶ整数 x
と定めてください。
答が複数考えられる場合には、そのどれを出力しても正解となります。
入力例 1
3
5 0 3 6 1 4 7 2
出力例 1
Yes
4
-1 6 -1 1
出力の操作列によって、数列 A は次のように変化します。
- 初期状態:A=(5,0,3,6,1,4,7,2)
- 操作 +:A=(6,1,4,7,2,5,0,3)
- 操作 oplus (x=6):A=(0,7,2,1,4,3,6,5)
- 操作 +:A=(1,0,3,2,5,4,7,6)
- 操作 oplus (x=1):A=(0,1,2,3,4,5,6,7)
入力例 2
3
2 5 4 3 6 1 0 7
出力例 2
No
どのように操作を行っても、目的を達成することはできません。
入力例 3
3
0 1 2 3 4 5 6 7
出力例 3
Yes
0
0 回の操作により目的が達成できます。なお、空行の出力の有無は、ジャッジ結果に影響しません。