M - Minimum Divisible Sequence 解説 /

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

配点 : 500

問題文

長さ N の正整数列 A=(A_1,A_2,\ldots,A_N) が与えられます。

以下を満たす長さ N の正整数列 B=(B_1,B_2,\ldots,B_N)良い数列 と呼びます。

  • |B_i-B_{i+1}|\le 1(1\le i<N)
  • B_iA_i の約数 (1\le i\le N)
  • B_i=B_{i+1} となる i(1\le i<N) は丁度 K

良い数列が存在するか判定し、存在するならばそのうち辞書順最小のものを求めてください。

T 個のテストケースが与えられるので、それぞれについて答えてください。

制約

  • 1\le T,N
  • 0\le K<N
  • 1\le A_i\le 10^{18}
  • 全てのテストケースに対する N の総和は 2\times 10^5 以下
  • 入力は全て整数

入力

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

T
\text{testcase}_1
\text{testcase}_2
\vdots
\text{testcase}_T

各テストケースは以下の形式で与えられる。

N K
A_1 A_2 \ldots A_N

出力

各テストケースについて、良い数列が存在しない場合 -1 を出力せよ。

存在する場合、そのうち辞書順最小のものを B'=(B'_1,B'_2,\ldots,B'_N) として、以下の形式で出力せよ。

B'_1 B'_2 \ldots B'_N

入力例 1

3
4 1
3 4 2 5
4 0
3 4 2 5
1 0
1

出力例 1

1 1 2 1
-1
1

1 番目のテストケースについて、辞書順最小の良い数列は (1,1,2,1) です。

2 番目のテストケースについて、良い数列は存在しません。