Después de practicar sus habilidades en Fillomino, Little Cyan Fish decide entrenar más en el juego «The Artisan of Glimmith».
Little Cyan Fish primero te presenta las reglas de Fillomino:
Para un rectángulo de $m$ filas y $n$ columnas, divide la cuadrícula en varias regiones (las celdas de cada región deben estar conectadas ortogonalmente), de modo que cualesquiera dos regiones adyacentes tengan áreas diferentes. Algunas celdas de la cuadrícula ya tienen números escritos. El número indica el área de la región a la que pertenece.
Un ejemplo de un rompecabezas Fillomino. Fuente: Puzzle GP 2022 R4
Ahora Little Cyan Fish te da un tablero de Fillomino, y quiere construir cualquier solución válida para este rompecabezas de Fillomino.
Por supuesto, este problema es demasiado difícil para Little Cyan Fish, por lo que solo necesitas resolver el caso en que $m = 1$. En otras palabras, dada una fila de $n$ celdas, quieres dividir estas celdas en varios segmentos (cada segmento contiene completamente varias celdas consecutivas), requiriendo que:
- Cualesquiera dos segmentos adyacentes tengan longitudes diferentes;
- Algunas celdas contienen números, y estos números indican la cantidad de celdas en el segmento al que pertenece dicha celda.
Little Cyan Fish te pide determinar si existe una solución válida para el tablero. Si existe, también debes imprimir cualquier solución válida.
Entrada
Hay múltiples casos de prueba. La primera línea de la entrada contiene un único entero $T$ ($1 \le T$), que indica el número de casos de prueba.
Para cada caso de prueba, la primera línea de la entrada contiene un entero $n$ ($1 \le n \le 10^6$).
La siguiente línea contiene $n$ enteros $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$). Si $a_i = 0$, significa que no se ha escrito ningún número en la $i$-ésima celda. De lo contrario, significa que se ha escrito $a_i$ en la $i$-ésima celda.
Se garantiza que la suma de $n$ en todos los casos de prueba no supera $10^6$.
Salida
Para cada caso de prueba, si no existe ningún esquema válido para rellenar los números, imprime una sola línea con «No».
De lo contrario, la primera línea de la salida contiene la cadena «Yes». La siguiente línea imprime $n$ enteros, que representan la longitud del segmento donde se ubica cada celda en el esquema que construiste. Si hay múltiples esquemas que cumplen los requisitos, puedes imprimir cualquiera de ellos.
Ejemplo
Entrada 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
Salida 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