フィルオミノ(Fillomino)のスキルを練習した後、Little Cyan Fish はゲーム「The Artisan of Glimmith」でさらにトレーニングすることにしました。
Little Cyan Fish はまず、あなたにフィルオミノのルールを紹介します:
$m$ 行 $n$ 列の長方形のグリッドについて、グリッドをいくつかの領域(各領域のマスは辺で連結していなければならない)に分割し、隣接するどの 2 つの領域も異なる面積を持つようにします。 グリッド内のいくつかのマスにはすでに数が書き込まれています。その数は、そのマスが属する領域の面積を表します。
フィルオミノのパズルの例。出典:Puzzle GP 2022 R4
今、Little Cyan Fish はあなたにフィルオミノの盤面を与え、このフィルオミノのパズルに対する有効な解を 1 つ構築したいと考えています。
もちろん、この問題は Little Cyan Fish にとって難しすぎるため、あなたは $m = 1$ の場合のみを解けばよいです。言い換えると、1 行に並んだ $n$ 個のマスが与えられたとき、以下の条件を満たすようにこれらのマスをいくつかの区間(各区間は連続するいくつかのマスを完全に含む)に分割したいです:
- 隣接するどの 2 つの区間も異なる長さを持つ;
- いくつかのマスには数が含まれており、これらの数はそのマスが属する区間に含まれるマスの個数を表す。
Little Cyan Fish は、この盤面に対して有効な解が存在するかどうかを判定するようあなたに求めています。存在する場合は、有効な解を 1 つ出力する必要もあります。
入力
複数のテストケースが与えられます。入力の 1 行目には、テストケースの個数を表す単一の整数 $T$ ($1 \le T$) が含まれます。
各テストケースについて、入力の 1 行目には整数 $n$ ($1 \le n \le 10^6$) が含まれます。
次の行には $n$ 個の整数 $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$) が含まれます。$a_i = 0$ の場合、$i$ 番目のマスには数が書き込まれていないことを意味します。そうでない場合、$i$ 番目のマスには $a_i$ が書き込まれていることを意味します。
すべてのテストケースにおける $n$ の総和は $10^6$ を超えないことが保証されます。
出力
各テストケースについて、数を埋める有効な方法が 1 つも存在しない場合は、「No」とだけ書かれた 1 行を出力してください。
そうでない場合、出力の 1 行目には文字列「Yes」を含めてください。次の行には、あなたが構築した方法において各マスが属する区間の長さを表す $n$ 個の整数を出力してください。条件を満たす方法が複数存在する場合は、そのうちのどれを出力しても構いません。
出力例
入力 1
7 3 0 0 0 4 2 0 0 0 4 0 2 0 0 6 0 3 3 0 3 0 10 2 0 0 3 0 0 4 0 0 1 6 0 0 1 1 0 0 6 1 2 3 4 5 6
出力 1
Yes 2 2 1 No Yes 1 2 2 1 No Yes 2 2 3 3 3 4 4 4 4 1 No No