L - Avoid Multiple 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MiB

配点 : 100

問題文

長さ N の正整数列 A=(A_1,A_2,\ldots,A_N) が与えられます。はじめ、 AM の倍数が含まれていないことが保証されます。

あなたは次の操作を N-1 回行います。

  1. 1 \le i \le |A|-1 を満たす整数 i を選択する
  2. A_iA_{i+1} を足して 1 つの要素にする
    • より正確には、 (A_1 ,\ldots,A_{i-1}),(A_{i}+A_{i+1}),(A_{i+2},\ldots,A_{|A|}) をこの順に連結したもので A を置き換える
    • この操作により A の長さは 1 減少する

操作の過程で AM の倍数が現れないように N-1 回の操作を行えるかどうか判定してください。 操作が可能な場合はそのような操作列を 1 つ構成してください。

制約

  • 入力はすべて整数
  • 3 \le N \le 2\times 10^5
  • 2 \le M \le 10^9
  • 1 \le A_i < M
  • A_iM の倍数ではない

入力

入力は以下の形式で与えられる。

N M
A_1 A_2 \cdots A_N

出力

条件を満たす操作列が存在しない場合、 1 行目に No を出力せよ。

条件を満たす操作列が存在する場合、 1 行目に Yes を出力し、 2 行目に各操作で選択した i を順に空白区切りで出力せよ。

条件を満たす操作列が複数存在する場合、どれを出力しても正解とみなされる。


入力例 1

4 4
1 2 3 1

出力例 1

Yes
2 1 1

この入力例において、はじめ A=(1,2,3,1) です。

  • 1 回目の操作では i=2 を選択して A=(1,5,1) となります。
  • 2 回目の操作では i=1 を選択して A=(6,1) となります。
  • 3 回目の操作では i=1 を選択して A=(7) となります。

この操作の過程では A4 の倍数が現れません。


入力例 2

9 5
3 2 3 2 1 3 2 3 2

出力例 2

Yes
4 3 2 2 2 2 1 1

入力例 3

7 123456789
69024393 73329927 23109098 63845999 71517732 113556305 79443702

出力例 3

No