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;
typedef long long ll;
inline int mygetchar()
{
#ifdef WIN32
	return _getchar_nolock();
#else
	return getchar_unlocked();
#endif
}
inline int read()
{
	int x = 0, f = 1;
	char c = mygetchar();
	while (!isdigit(c))
	{
		if (c == '-') f = -1;
		c = mygetchar();
	}
	while (isdigit(c))
	{
		x = x * 10 + c - '0';
		c = mygetchar();
	}
	return x * f;
}

const int MOD = 998244353;
inline void add(int &x, int y) {x += y; if (x >= MOD) x -= MOD;}
inline int inc(int x, int y) {x += y; return x >= MOD ? x - MOD : x;}
inline int mul(int x, int y) {return (ll)x * y % MOD;}
inline int qpow(int x, int y)
{
	int res = 1;
	for (; y; y >>= 1, x = mul(x, x))
		if (y & 1) res = mul(res, x);
	return res;
}

const int MAXN = 6005;
int n, X, c[MAXN][MAXN], ans = 0;

inline int Solve(int len)
{
	int res = 0;
	if (len * 2 < X || X & 1) res = 1;
	for (int i = 0; i < len; i ++)
	{
		if (len + i < X)
			add(res, c[len][i]);
		else if ((len + i - X) & 1)
		{
			int S = len + i, l = (S - X + 1) / 2;
			if (len > l + l && i >= l + l) add(res, c[len - l - l][i - l - l]);
		}
	}
	return res;
}
int main()
{
	n = read(), X = read();
	for (int i = 0; i <= n * 2; i ++) c[i][0] = 1;
	for (int i = 1; i <= n * 2; i ++)
		for (int j = 1; j <= i; j ++)
			c[i][j] = inc(c[i - 1][j], c[i - 1][j - 1]);
	for (int i = 0; i <= n; i ++)
		add(ans, mul(c[n][i], Solve(n - i)));
	printf("%d\n", ans);
	return 0;
}