#AT1226. 跑得快

跑得快

题目描述

高桥正在玩一个叫做“跑得快”的棋盘游戏。 棋盘上一共有 N+1N +1个方格,编号从00NN

高桥从方格00开始,他必须在方格 NN 停下来才能赢得比赛。

这个游戏使用一个有 MM 个数字的转盘,数字从11MM

每次高桥都要旋转转盘。如果当他在方格ss时出现数字 xx,他就会移到方格 s+xs+x

如果这使他超出方格 NN,他就会输掉比赛。此外,一些方格是“游戏结束方格”。

如果他停在其中一个方格上,他也会输掉比赛。给定一个长度为 N+1N +1的字符串SS,表示哪些方格是游戏结束方格。

对于每个i(0iN)i(0 \leq i \leq N),如果 S[i]=1S[i]=1,则方格ii是游戏结束方格,否则方格ii不是。

找到转盘中数字的序列,高桥可以在尽可能少的回合中赢得比赛。

如果有多个这样的序列,找出字典序最小的一个。

如果高桥不能赢得比赛,则打印 -1。

输入

第1行,两个正整数N,MN,M

第2行,一个长为N+1N+1的字符串SSSi=0S_i=0表示第ii格是一个普通格子;Si=1S_i=1表示第ii格是一个GameOver格。

输出

输出用最短回合到达NN格时,每回合骰子的点数组成的序列,若有多种序列回合数都是最短,输出其中字典序最小的。

如果无法到达NN号格子,输出-1。

9 3
0001000100
1 3 2 3

样例说明

1,3,2,31,3,2,3的顺序扔出骰子的点数,高桥君会经过第1,4,61,4,6格最终到达第99格。

无法在33次以内到达第99格。1,3,2,31,3,2,3是所有44次到达第99格的点数序列中,字典序最小的。

5 4
011110
-1
6 6
0101010
6

提示

  • 1 < = N < = 105 1\ <\ =\ N\ <\ =\ 10^5
  • 1 < = M < = 105 1\ <\ =\ M\ <\ =\ 10^5
  • S = N + 1 |S|\ =\ N\ +\ 1
  • S[0] = S[0]\ = 0
  • S[N] = S[N]\ = 0