Find the number, modulo 998244353, of sequences of length N consisting of 0, 1 and 2 such that none of their contiguous subsequences totals to X.

Constraints

* 1 \leq N \leq 3000
* 1 \leq X \leq 2N
* N and X are integers.

Input

Input is given from Standard Input in the following format:


N X


Output

Print the number, modulo 998244353, of sequences that satisfy the condition.

Examples

Input

3 3


Output

14


Input

8 6


Output

1179


Input

10 1


Output

1024


Input

9 13


Output

18402


Input

314 159


Output

459765451
#include<bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define umax(x,y) x=max(x,y)
#define umin(x,y) x=min(x,y)
#define ll long long 
#define ii pair<int,int>
#define iii pair<int,ii>
#define iiii pair<ii,ii>
#define sz(x) ((int) x.size())
#define orta ((bas+son)/2)
#define all(x) x.begin(),x.end()
#define pw(x) (1<<(x))
#define inf 1000000005
#define MOD 998244353 
#define N 3005
#define M 1000003
#define LOG 20
#define KOK 250
#define EPS 0.0000001
using namespace std;

int n,x,ans;
int dp[N][N*2],dp2[N],f[N],inv[N];

int mul(int x,int y) {
	
	return (ll)x*y%MOD;

}

int add(int x,int y) {

	x+=y;

	if(x>=MOD) x-=MOD;
	if(x<0) x+=MOD;

	return x;

}

int fe(int x,int y) {

	if(y==0) return 1;
	if(y&1) return mul(x,fe(x,y-1));

	int res=fe(x,y/2);

	return mul(res,res);

}

int fill(int has,int pos) {

	return mul(f[has+pos-1],mul(inv[has],inv[pos-1]));

}

int main() {

	scanf("%d %d",&n,&x);

	dp[0][0]=1;

	for(int i=1;i<=n;i++) {

		for(int tot=0;tot<=i*2;tot++) {

			if(tot>=1) dp[i][tot]=add(dp[i][tot],dp[i-1][tot-1]);
			if(tot>=2) dp[i][tot]=add(dp[i][tot],dp[i-1][tot-2]);

		}

	}

	f[0]=inv[0]=1;

	for(int i=1;i<=n;i++) {

		f[i]=mul(f[i-1],i);
		inv[i]=fe(f[i],MOD-2);

	}

	for(int i=0;i<=n;i++) {

		for(int j=0;j<=x-2;j++) {

			ans=add(ans,mul(dp[i][j],fill(n-i,i+1)));

		}

	}
	
	for(int i=0;i*2+2<=x;i++) {

		int ws=x-i*2-2;

		for(int len=0;len+i+1<=n;len++) {

			dp2[i+len+1]=add(dp2[i+len+1],dp[len][ws]);	
			dp2[min(n+1,i*2+len+2)]=add(dp2[min(n+1,i*2+len+2)],-dp[len][ws]);

		}

	}

	if(x%2) dp2[(x-1)/2]=add(dp2[(x-1)/2],1);

	for(int i=0;i<=n;i++) {

		if(i) dp2[i]=add(dp2[i],dp2[i-1]);

		ans=add(ans,mul(dp2[i],fill(n-i,i+1)));

	}

	printf("%d",ans);

}