Efter att ha övat på sina färdigheter i Fillomino bestämmer sig Little Cyan Fish för att träna mer i spelet "The Artisan of Glimmith".
Little Cyan Fish presenterar först reglerna för Fillomino för dig:
För en rektangel med $m$ rader och $n$ kolumner, dela in rutnätet i flera områden (rutorna i varje område måste vara ortogonalt sammanhängande), så att varje par av angränsande områden har olika areor. Vissa rutor i rutnätet har redan ifyllda tal. Talet anger arean på det område som rutan tillhör.
Ett exempel på ett Fillomino-pussel. Källa: Puzzle GP 2022 R4
Little Cyan Fish ger dig nu ett Fillomino-bräde, och han vill konstruera en giltig lösning vilken som helst för detta Fillomino-pussel.
Naturligtvis är detta problem för svårt för Little Cyan Fish, så du behöver bara lösa fallet där $m = 1$. Med andra ord, givet en rad med $n$ rutor vill du dela in dessa rutor i flera segment (varje segment innehåller helt och hållet ett antal på varandra följande rutor), med kraven att:
- Varje par av angränsande segment har olika längder;
- Vissa rutor innehåller tal, och dessa tal anger antalet rutor i det segment som rutan tillhör.
Little Cyan Fish ber dig avgöra om det finns en giltig lösning för brädet. Om det finns en sådan måste du också skriva ut en giltig lösning vilken som helst.
Indata
Det finns flera testfall. Den första raden i indata innehåller ett enda heltal $T$ ($1 \le T$), som anger antalet testfall.
För varje testfall innehåller den första raden i indata ett heltal $n$ ($1 \le n \le 10^6$).
Nästa rad innehåller $n$ heltal $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$). Om $a_i = 0$ betyder det att inget tal är ifyllt i den $i$-te rutan. Annars betyder det att $a_i$ är ifyllt i den $i$-te rutan.
Det garanteras att summan av $n$ över alla testfall inte överstiger $10^6$.
Utdata
För varje testfall, om det inte finns något giltigt sätt att fylla i talen, skriv ut en enda rad med "No".
Annars innehåller den första raden i utdata strängen "Yes". Nästa rad skriver ut $n$ heltal, som representerar längden på det segment där varje ruta befinner sig i den lösning du konstruerat. Om det finns flera lösningar som uppfyller kraven kan du skriva ut vilken som helst av dem.
Exempel
Indata 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
Utdata 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