Nachdem Little Cyan Fish seine Fähigkeiten in Fillomino geübt hat, beschließt er, im Spiel „The Artisan of Glimmith“ weiter zu trainieren.
Little Cyan Fish stellt dir zunächst die Regeln von Fillomino vor:
Teile für ein Rechteck aus $m$ Zeilen und $n$ Spalten das Gitter in mehrere Gebiete auf (die Zellen jedes Gebiets müssen orthogonal zusammenhängen), sodass je zwei benachbarte Gebiete unterschiedliche Flächeninhalte haben. In einigen Zellen des Gitters sind bereits Zahlen eingetragen. Die Zahl gibt den Flächeninhalt des Gebiets an, zu dem die Zelle gehört.
Ein Beispiel für ein Fillomino-Rätsel. Quelle: Puzzle GP 2022 R4
Little Cyan Fish gibt dir nun ein Fillomino-Spielfeld und möchte eine beliebige gültige Lösung für dieses Fillomino-Rätsel konstruieren.
Natürlich ist dieses Problem für Little Cyan Fish zu schwierig, sodass du nur den Fall $m = 1$ lösen musst. Mit anderen Worten: Gegeben ist eine Zeile aus $n$ Zellen, und du möchtest diese Zellen in mehrere Segmente unterteilen (wobei jedes Segment vollständig aus mehreren aufeinanderfolgenden Zellen besteht), sodass gilt:
- Je zwei benachbarte Segmente haben unterschiedliche Längen;
- Einige Zellen enthalten Zahlen, und diese Zahlen geben die Anzahl der Zellen in dem Segment an, zu dem diese Zelle gehört.
Little Cyan Fish bittet dich festzustellen, ob eine gültige Lösung für das Spielfeld existiert. Falls sie existiert, musst du außerdem eine beliebige gültige Lösung ausgeben.
Eingabe
Es gibt mehrere Testfälle. Die erste Zeile der Eingabe enthält eine einzelne ganze Zahl $T$ ($1 \le T$), die die Anzahl der Testfälle angibt.
Für jeden Testfall enthält die erste Zeile der Eingabe eine ganze Zahl $n$ ($1 \le n \le 10^6$).
Die nächste Zeile enthält $n$ ganze Zahlen $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$). Wenn $a_i = 0$ ist, bedeutet dies, dass in der $i$-ten Zelle keine Zahl eingetragen ist. Andernfalls bedeutet es, dass $a_i$ in der $i$-ten Zelle eingetragen ist.
Es wird garantiert, dass die Summe von $n$ über alle Testfälle hinweg $10^6$ nicht überschreitet.
Ausgabe
Gib für jeden Testfall eine einzelne Zeile „No“ aus, falls kein gültiges Schema zum Ausfüllen der Zahlen existiert.
Andernfalls enthält die erste Zeile der Ausgabe die Zeichenkette „Yes“. Die nächste Zeile gibt $n$ ganze Zahlen aus, die die Länge des Segments angeben, in dem sich jede Zelle in dem von dir konstruierten Schema befindet. Falls es mehrere Schemata gibt, die die Anforderungen erfüllen, kannst du eines davon beliebig ausgeben.
Beispiel
Eingabe 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
Ausgabe 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