#include<iostream>
#include<cstdio>
using namespace std;
const int mod=2009,maxn=150;
int N,T,atop,a[maxn][maxn],b[maxn][maxn],ls[maxn][maxn];
void calc(int _N,int _M,int _P,int _a[maxn][maxn],int _b[maxn][maxn],int _c[maxn][maxn]){
for(int i=1;i<=_N;i++){
for(int j=1;j<=_P;j++){
ls[i][j]=0;
for(int k=1;k<=_M;k++){
ls[i][j]+=_a[i][k]*_b[k][j];
}
ls[i][j]%=mod;
}
}
for(int i=1;i<=_N;i++){
for(int j=1;j<=_P;j++){
_c[i][j]=ls[i][j];
}
}
}
void qsm(int t){
for(;t;t>>=1){
if(t&1) calc(atop,atop,atop,b,a,b);
calc(atop,atop,atop,a,a,a);
}
}
int main(){
scanf("%d%d",&N,&T);atop=N;
for(int i=1;i<=N;i++){
char c=getchar();
while(c<'0'||c>'9') c=getchar();
for(int j=1;'0'<=c&&c<='9';j++){
c-='0';
if(!c) a[i][j]=0;
else if(c==1) a[i][j]=1;
else{
int lst=i;
for(int i=1;i<c;i++) a[lst][++atop]=1,lst=atop;
a[lst][j]=1;
}
c=getchar();
}
}
for(int i=1;i<=atop;i++) b[i][i]=1;
qsm(T);
printf("%d\n",b[1][N]);
return 0;
}
已验证,maxn开110和150一样。
理论上用不着啊