Dopo essersi esercitato nelle abilità di Fillomino, Little Cyan Fish decide di allenarsi ancora di più nel gioco «The Artisan of Glimmith».
Per prima cosa, Little Cyan Fish ti presenta le regole di Fillomino:
Per un rettangolo di $m$ righe e $n$ colonne, dividi la griglia in diverse regioni (le celle di ciascuna regione devono essere connesse ortogonalmente), in modo che due regioni adiacenti qualsiasi abbiano aree diverse. Alcune celle della griglia hanno già dei numeri inseriti. Il numero indica l'area della regione a cui appartiene.
Un esempio di rompicapo Fillomino. Fonte: Puzzle GP 2022 R4
Ora Little Cyan Fish ti dà una scacchiera di Fillomino e vuole costruire una qualsiasi soluzione valida per questo rompicapo di Fillomino.
Naturalmente, questo problema è troppo difficile per Little Cyan Fish, quindi devi risolvere solo il caso in cui $m = 1$. In altre parole, data una riga di $n$ celle, vuoi dividere queste celle in diversi segmenti (ogni segmento contiene interamente diverse celle consecutive), richiedendo che:
- Due segmenti adiacenti qualsiasi abbiano lunghezze diverse;
- Alcune celle contengono dei numeri, e questi numeri indicano il numero di celle nel segmento a cui appartiene tale cella.
Little Cyan Fish ti chiede di determinare se esiste una soluzione valida per la scacchiera. Se esiste, devi anche stampare una qualsiasi soluzione valida.
Input
Ci sono più casi di test. La prima riga dell'input contiene un singolo intero $T$ ($1 \le T$), che indica il numero di casi di test.
Per ogni caso di test, la prima riga dell'input contiene un intero $n$ ($1 \le n \le 10^6$).
La riga successiva contiene $n$ interi $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$). Se $a_i = 0$, significa che non è stato inserito alcun numero nella $i$-esima cella. Altrimenti, significa che nella $i$-esima cella è stato inserito $a_i$.
È garantito che la somma di $n$ su tutti i casi di test non supera $10^6$.
Output
Per ogni caso di test, se non esiste alcuno schema valido per inserire i numeri, stampa una singola riga «No».
Altrimenti, la prima riga dell'output contiene la stringa «Yes». La riga successiva stampa $n$ interi, che rappresentano la lunghezza del segmento in cui si trova ciascuna cella nello schema che hai costruito. Se ci sono più schemi che soddisfano i requisiti, puoi stamparne uno qualsiasi.
Esempio
Input 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
Output 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