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>
using namespace std;

#define ll long long
#define sd(x) scanf("%d", &(x))
#define pii pair<int, int>
#define F first
#define S second

#define TRACE

#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
	cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
	const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif
const int mod = 998244353;

const int N = 10005;
int fact[N], invfact[N];
inline int add(int x, int y){ x += y; if(x >= mod) x -= mod; return x;}
inline int sub(int x, int y){ x -= y; if(x < 0) x += mod; return x;}
inline int mul(int x, int y){ return (((ll) x) * y) % mod;}
inline int powr(int a, ll b){
	int x = 1 % mod;
	while(b){
		if(b & 1) x = mul(x, a);
		a = mul(a, a);
		b >>= 1;
	}
	return x;
}
inline int inv(int a){ return powr(a, mod - 2);}
void pre(){
	fact[0] = invfact[0] = 1;
	for(int i = 1;i < N; i++) fact[i] = mul(i, fact[i - 1]);
	invfact[N - 1] = inv(fact[N - 1]);
	for(int i = N - 2; i >= 1; i--) invfact[i] = mul(invfact[i + 1], i + 1);
	assert(invfact[1] == 1);
}

inline int C(int n, int k){
	if(n < k || k < 0) return 0;
	return mul(fact[n], mul(invfact[k], invfact[n - k]));
}

int f[3005][2 * 3005];
int g[N];

inline int getSum(int m, int i, int j){
	return sub(f[m][j], i <= 1 ? 0 : f[m][i - 2]);
}

int main(){
	pre();
	int n, x;
	cin >> n >> x;
	int ans = 0;
	f[0][0] = 1;
	g[0] = 1;
	for(int i = 1; i <= n; i++){
		for(int j = 2 * i; j >= 0; j--)
			for(int k = 1; k <= 2; k++) if(j - k >= 0){
				f[i][j] = add(f[i][j], f[i - 1][j - k]);
				g[j] = add(g[j], g[j - k]);
			}
	}

	for(int i = 0; i <= n; i++)
		for(int j = 2; j <= 2 * n; j++) f[i][j] = add(f[i][j - 2], f[i][j]);

	// total sum < x
	for(int i = 0; i < x; i++) ans = add(ans, g[i]);
	for(int t = 2; t + 1 <= n; t++){
		for(int m = 0; m + t + 1 <= n; m++){
			int mn = (t + 1) >> 1;
			int mx = t - 1;
			if(x - 2 * mn - 2 >= 0)
				ans = add(ans, mul(C(n, m + t + 1), getSum(m, max(0, x - 2 * (mx + 1)), x - 2 * (mn + 1))));
		}
	}
	if((x & 1)){
		// all 2's
		for(int t = (x + 1) / 2; t <= n; t++) ans = add(ans, C(n, t));
	}
	cout << ans;
}