#D0150. Walk

Walk

问题陈述

有一个简单的有向图 GG ,其顶点为 NN ,编号为 1,2,,N1, 2, \ldots, N

对于每个 iijj ( 1i,jN1 \leq i, j \leq N ) 1i,jN1 \leq i, j \leq N ),你会得到一个整数 ai,ja_{i, j} ,表示顶点 iijj 之间是否有一条有向边。如果是 ai,j=1a_{i, j} = 1 ,则存在一条从顶点 iijj 的有向边,如果是 ai,j=0a_{i, j} = 0 ,则没有。

GG 中长度为 KK 的不同有向路径的数目,对 109+710^9 + 7 取模。我们还将计算多次穿越同一条边的路径。

限制因素

  • 所有输入值均为整数。
  • 1N501 \leq N \leq 50
  • 1K10181 \leq K \leq 10^{18}
  • ai,ja_{i, j}0011
  • ai,i=0a_{i, i} = 0

输入

输入内容由标准输入法提供,格式如下:

  • NN KK
  • a1,1a_{1, 1} \ldots a1,Na_{1, N}
  • ::
  • aN,1a_{N, 1} \ldots aN,Na_{N, N}

输出

打印 GG 中长度为 KK 的不同有向路径的数量,模数为 109+710^9 + 7

4 2
0 1 0 0
0 0 1 1
0 0 0 1
1 0 0 0
6

GG 如下图所示:

有六条长度为 22 的有向路径:

  • 112233
  • 112244
  • 223344
  • 224411
  • 334411
  • 441122
3 3
0 1 0
1 0 1
0 0 0
3

GG 如下图所示:

有三条长度为 33 的有向路径:

  • 11221122
  • 22112211
  • 22112233
6 2
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 0 0 1
0 0 0 0 0 0
1

GG 如下图所示:

有一条长度为 22 的有向路径:

  • 445566
1 1
0
0
10 1000000000000000000
0 0 1 1 0 0 0 1 1 0
0 0 0 0 0 1 1 1 0 0
0 1 0 0 0 1 0 1 0 1
1 1 1 0 1 1 0 1 1 0
0 1 1 1 0 1 0 1 1 1
0 0 0 1 0 0 1 0 1 0
0 0 0 1 1 0 0 1 0 1
1 0 0 0 1 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
1 0 1 1 1 0 1 1 1 0
957538352

记得对 109+710^9 + 7 取余。

来源

https://atcoder.jp/contests/dp/tasks/dp_r