#include<bits/stdc++.h>
#define p 30011
using namespace std;
int read()
{
int xsef = 0,yagx = 1;char cejt = getchar();
while(cejt < '0'||cejt > '9'){if(cejt == '-')yagx = -1;cejt = getchar();}
while(cejt >= '0'&&cejt <= '9'){xsef = (xsef << 1) + (xsef << 3) + cejt - '0';cejt = getchar();}
return xsef * yagx;
}
int n,m;
struct node{
int a[110][110];
node(){
memset(a, 0, sizeof(a));
}
}b,c,d;
node operator * (node x, node y){
node z;
for(int i = 1;i <= n * 2;i++){
for(int j = 1;j <= n * 2;j++){
for(int k = 1;k <= n * 2;k++){
z.a[i][j] = (z.a[i][j] + x.a[i][k] * y.a[k][j]) % p;
}
}
}
return z;
}
void build(){
for(int i=1;i<=n;i++){
if(i!=1)
b.a[i][i-1]=1;
b.a[i][i]=1;
if(i!=n)
b.a[i][i+1]=1;
}
for(int i=1;i<=n;i++){
b.a[i][i+n]=1;
}
for(int i=1;i<=n;i++){
b.a[i+n][i]=1;
}
}
void ksm(){
while(m){
if(m&1)
c=c*b;
b=b*b;
m>>=1;
}
}
signed main(){
n=read(),m=read();
build();
d = b;
m-=2;
for(int i=1;i<=n*2;i++)
c.a[i][i]=1;
ksm();
int ans = -c.a[1][n+n];
c=c*d;
ans += c.a[1][n];
printf("%d",ans + p % p);
return 0
}
为什么编译错误?