#include<bits/stdc++.h>
using namespace std;
#define MAXN 5005
#define lowbit(x) (x&-x)
#define reg register
#define mkpr make_pair
#define fir first
#define sec second
typedef long long LL;
typedef unsigned long long uLL;
const int INF=0x3f3f3f3f;
const int mo=998244353;
const LL jzm=2333;
const int iv2=499122177;
const double Pi=acos(-1.0);
typedef pair<int,int> pii;
const double PI=acos(-1.0);
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){
	_T f=1;x=0;char s=getchar();
	while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
	while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}
	x*=f;
}
template<typename _T>
void print(_T x){if(x<0){x=(~x)+1;putchar('-');}if(x>9)print(x/10);putchar(x%10+'0');}
int n,m,fac[MAXN],inv[MAXN],f[MAXN],g[15][MAXN];
int add(int x,int y){return x+y<mo?x+y:x+y-mo;}
void init(){
	fac[0]=fac[1]=f[1]=inv[0]=inv[1]=1;
	for(int i=2;i<=5000;i++){
		fac[i]=1ll*i*fac[i-1]%mo;
		f[i]=1ll*(mo-mo/i)*f[mo%i]%mo;
		inv[i]=1ll*f[i]*inv[i-1]%mo;
	}
}
int C(int x,int y){
	if(x<y||x<0||y<0)return 0;
	return 1ll*fac[x]*inv[y]%mo*inv[x-y]%mo;
}
signed main(){
	read(n);read(m);init();g[0][0]=1;
	for(int i=1;i<=13;i++){
		for(int j=0;j<=n&&1ll*j*(1<<i-1)<=m;j+=2)
			for(int k=m;k>=1ll*j*(1<<i-1);k--)
				g[i][k]=add(1ll*C(n,j)*g[i-1][k-1ll*j*(1<<i-1)]%mo,g[i][k]);
		//for(int j=0;j<=m;j++)printf("g%d %d:%d\n",i,j,g[i][j]);
	}
	printf("%d\n",g[13][m]);
	return 0;
}
/*

*/
#include <bits/stdc++.h>
using namespace std;

const int maxn=210;

int n;
unsigned long long C[maxn][maxn];

int main() // C(n-1,11)
{
	cin>>n;n--;

	for(int i=0;i<=n;i++) C[i][0]=1;
	for(int i=1;i<=n;i++) for(int j=1;j<=12;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];

	cout<<C[n][11];
	
	return 0;
}