Sugoroku


Submit solution

Points: 100 (partial)
Time limit: 2.0s
Memory limit: 1G

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Perl, Prolog, Python, Scala, Swift, VB

Carlitos está jugando a un juego de mesa llamado Sugoroku. En el tablero hay N+1 casillas numeradas de 0 a N (1 \leq N \leq 10^5). Carlitos empieza en la casilla 0, y tiene que detenerse exactamente en la casilla N para ganar la partida.

El juego utiliza una ruleta con los M números de 1 a M (1 \leq M \leq 10^5). En cada turno, el muchacho hace girar la ruleta. Si el número x sale cuando está en la casilla s, se mueve a la casilla s+x. Si esto le hace ir más allá de la casilla N, pierde la partida.

Además, algunas de las casillas son casillas de Game Over. También pierde la partida si se detiene en una de ellas. Se le da una cadena S de longitud N+1, que representa qué casillas son casillas de fin de partida. Para cada casilla i (0 \leq i \leq N), es Game Over si S_i=1 y no lo es si S_i=0. Se sabe que S_0 = 0 y S_n = 0.

Encuentre la secuencia de números que salen en la ruleta en la que Carlitos puede ganar la partida en el menor número de turnos posible. Si hay varias secuencias de este tipo, encuentra la secuencia lexicográficamente más pequeña. Si no se puede ganar la partida, imprime -1.

Entrada

La primera línea de la entrada contiene los enteros N y M. La segunda línea contiene la cadena S.

Salida

Si Carlitos puede ganar la partida, imprime la secuencia lexicográficamente más pequeña entre las secuencias más cortas de números que salen en la ruleta en las que Carlitos puede ganar la partida, con espacios intermedios. Si Carlitos no puede ganar la partida, imprime -1.

Ejemplo de Entrada #1

9 3
0001000100

Ejemplo de Salida #1

1 3 2 3

Ejemplo de Entrada #2

5 4
011110

Ejemplo de Salida #2

-1

Ejemplo de Entrada #3

6 6
0101010

Ejemplo de Salida #3

6

Comments

There are no comments at the moment.