#abc291f. [abc291_f]Teleporter and Closed off

[abc291_f]Teleporter and Closed off

问题描述

NN 个城市,编号为城市 11,城市 22,……,城市 NN
还有一种单向传送器,可以将你传送到不同的城市。传送器是否可以直接从城市 ii (1iN)(1\leq i\leq N) 发送到另一个城市由长度为 MM 的字符串 SiS_i 表示,该字符串由 01 组成。具体来说,对于 1jN1\leq j\leq N

  • 如果 1jiM1\leq j-i\leq M,并且 SiS_i 的第 (ji)(j-i) 个字符是 1,则传送器可以直接将你从城市 ii 送到城市 jj
  • 否则,它不能直接将你从城市 ii 送到城市 jj

解决以下问题,对于 k=2,3,,N1k=2,3,\ldots,N-1

你能通过反复使用传送器从城市 11 到达城市 NN 而不经过城市 kk 吗?如果可以,请打印你需要使用传送器的最小次数;否则,打印 1-1

约束条件

  • 3N1053 \leq N \leq 10^5
  • 1M101\leq M\leq 10
  • M<NM<N
  • SiS_i 是长度为 MM 的由 01 组成的字符串。
  • 如果 i+j>Ni+j>N,则 SiS_i 的第 jj 个字符是 0
  • NNMM 是整数。

输入

输入以以下格式从标准输入给出:

NN MM S1S_1 S2S_2 \vdots SNS_N

输出

在一行中打印 (N2)(N-2) 个用空格分隔的整数。第 ii(1iN2)(1\leq i\leq N-2) 整数应该是对于 k=i+1k=i+1 的问题的答案。


示例输入1

5 2
11
01
11
10
00

示例输出1

2 3 2

传送器可以将你从城市 11 送到城市 2233; 传送器可以将你从城市 22 送到城市 44; 传送器可以将你从城市 33 送到城市 4455; 传送器可以将你从城市 44 送到城市 55; 传送器无法将你从城市 55 送到其他城市。

因此,有三条路径可以从城市 11 到达城市 55

  • 路径 11:城市 11 to\\to 城市 22 to\\to 城市 44 to\\to 城市 55
  • 路径 22:城市 11 to\\to 城市 33 to\\to 城市 44 to\\to 城市 55
  • 路径 33:城市 11 to\\to 城市 33 to\\to 城市 55

在这些路径中,

  • 两条路径,路径 22 和路径 33,都没有经过城市 22。其中,路径 33 需要使用传送器的最小次数(两次)。
  • 路径 11 是唯一不经过城市 33 的路径。需要使用传送器三次。
  • 路径 33 是唯一不经过城市 44 的路径。需要使用传送器两次。

因此,应该打印 223322,用空格分隔。


示例输入2

6 3
101
001
101
000
100
000

示例输出2

-1 3 3 -1

从城市 11 到达城市 66 的唯一路径是城市 11 to\\to 城市 22 to\\to 城市 55 to\\to 城市 66
对于 k=2,5k=2,5,无法从城市 11 到达城市 66 而不经过城市 kk
对于 k=3,4k=3,4,上述路径满足条件;需要使用传送器三次。

因此,应该打印 1-133331-1,用空格分隔。

请注意,传送器是单向的;传送器可以将你从城市 33 送到城市 44,但不能从城市 44 送到城市 33, 因此,以下路径无效:城市 11 to\\to 城市 44 to\\to 城市 33 to\\to 城市 66