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
//第8回シンデレラガール総選挙は是非本田未央ちゃんに投票をお願いします！
//ファンのことも他のアイドルの子たちのことも本当に大事にしてて、今まで周りに色んなものを与えてくれました。
//今度は私たちが未央ちゃんにお返しをする番です。みんなでガラスの靴を履かせてあげましょう！
// #本田未央を一番星に #本田未央を令和のシンデレラガールに #第8回シンデレラガール総選挙
#include<vector>
#include<cmath>
#include<map>
#include<cstdlib>
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<set>
#include<stack>
#include<bitset>
#include<functional>
#include<ctime>
#include<queue>
#include<deque>
#include<complex>
#include<cassert>
using namespace std;
#define pb push_back
#define pf push_front
typedef long long lint;
typedef complex<double> P;
#define mp make_pair
#define fi first
#define se second
typedef pair<int,int> pint;
#define All(s) s.begin(),s.end()
#define rAll(s) s.rbegin(),s.rend()
#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
//問題文および制約はちゃんと確認しよう！
//サイズは10^5じゃなくて2×10^5とかかもしれないし、重要な制約・条件を見落としているかも
//とりあえずサンプルを読んでから解法を考えよう？
lint d2[3010][6010];
lint co[3010][3010];
lint dp[3010][6010][2][2];
lint mo=998244353;
int main()
{
	int n,x;cin>>n>>x;
	/*memset(dp,0,sizeof(dp));
	dp[0][0][0][0]=1;
	rep(i,n) rep(j,x+5) rep(k,2){
		rep(l,2) dp[i][j][k][l]%=mo;
		//0
		dp[i+1][j][k][0]+=dp[i][j][k][0];
		dp[i+1][j][k][1]+=dp[i][j][k][1];
		//1
		dp[i+1][j][k][0]+=dp[i][j][k][0]+dp[i][j][k][1];
		//2
		if(j<1){
			dp[i+1][j][1][1]+=dp[i][j][k][0];
		}
		else{
			dp[i+1][j][k][1]+=dp[i][j][k][0]+dp[i][j][k][1];
		}
	}
	lint out=0;
	rep(i,x) rep(j,2) rep(k,2){
		out+=dp[n][i][j][k];out%=mo;
	}
	out+=dp[n][x+1][1][1];out%=mo;*/
	
	memset(d2,0,sizeof(d2));
	d2[0][0]=1;
	rep(i,n) rep(j,6005){
		d2[i][j]%=mo;
		rep(k,3) d2[i+1][j+k]+=d2[i][j];
	}
	memset(co,0,sizeof(co));
	rep(i,3005){
		co[i][0]=co[i][i]=1;
		REP(j,1,i) co[i][j]=(co[i-1][j]+co[i-1][j-1])%mo;
	}
	lint out=0;
	rep(i,x){
		out+=d2[n][i];out%=mo;
	}
	//cout<<out<<endl;
	for(int i=1;i<3010;i++){
		int re=x+i*2-1-i*4;
		if(re<0){
			int sum=x+i*2-1;
			//cout<<sum<<endl;
			if(sum%2==0 && sum/2<=n){
				out+=co[n][sum/2];out%=mo;
			}
			continue;
		}
		rep(j,n+1){
			if(n-2*i-j<0) continue;
			out+=d2[j][re]*co[n-j-1][2*i-1];
			out%=mo;
		}
	}
	cout<<out%mo<<endl;
}
