#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>usingnamespacestd;
constint N=2000;
constint M=65;
constint P=123456788;
int f[16][N][M];
int a[N][2];
int l,n,m;
void dfs(int dep,int x,int y)
{
if (dep>n) return;
if (dep==n) {l++;a[l][0]=x;a[l][1]=y;}
dfs(dep+1,x<<1,y);
dfs(dep+2,(x<<2)+1,y+1);
}
int pd(int x,int y)
{
if ((a[x][0]&a[y][0])!=0) return0;
if (((a[x][0]<<1)&a[y][0])!=0) return0;
if (((a[x][0]>>1)&a[y][0])!=0) return0;
return1;
}
int main()
{
scanf("%d%d",&n,&m);
dfs(0,0,0);
dfs(1,1,1);
int i,j,k,now;
f[0][1][0]=1;
for (i=1;i<=n;i++)
for (j=1;j<=l;j++)
for (now=1;now<=l;now++)
if (pd(j,now)==1)
for (k=a[j][1];k<=m;k++)
f[i][j][k]=(f[i][j][k]+f[i-1][now][k-a[j][1]])%P;
int ans=0;
for (i=1;i<=l;i++)
ans=(ans+f[n][i][m])%P;
printf("%d\n",ans);
return0;
}