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 fio ios_base::sync_with_stdio(false)
#define pdl cout << "*" << endl
#define MOD 1000000007
#define INF 1000000000
#define INFLL 1000000000000000000ll
#define ff first
#define ss second
#define long int64_t
using namespace std;
typedef pair<int, int> pii;
typedef pair<long, long> pll;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
uniform_int_distribution<> dis(0, INF<<1);
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char* name, Arg1&& arg1){ cerr << name << " : " << arg1 << 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...); }

const int N = 3001;
const int mod = 998244353;

int c[N][N], ps[N+1], mul[N][N], dp[2][N][N << 1];

int main()
{
	fio;
	for(int i=0; i<N; i++)
		c[i][0] = 1;
	for(int i=1; i<N; i++)
		for(int j=1; j<N; j++)
			c[i][j] = (c[i-1][j] + c[i-1][j-1]) % mod;
	int n, k;
	cin >> n >> k;
	for(int i=n; i>=0; i--)
		ps[i] = (ps[i+1] + c[n][i]) % mod;
	for(int l=1; l<=n; l++)
	{
		mul[l][0] = c[n][l];
		for(int y=1; l+y<=n; y++)
		{
			mul[l][y] = (mul[l][y-1] + ps[l+y] + 0ll + ps[l+y]) % mod;
			if(l + (y << 1) < n)
				mul[l][y] = ((mul[l][y] - ps[l + (y << 1)] - ps[l + (y << 1) + 1]) % mod + mod) % mod;
			else if(l + (y << 1) == n)
				mul[l][y] = (mul[l][y] - c[n][n] + mod) % mod;
		}
		for(int y=n-l+1; y<=n; y++)
			mul[l][y] = mul[l][y-1];
	}
	dp[0][1][1] = 1;
	for(int l=2; l<=n; l++)
		for(int x=2; x<=k; x++)
			for(int i=0; i<2; i++)
				dp[i][l][x] = (dp[0][l-1][x-1-i] + dp[1][l-1][x-1-i]) % mod;
	int ans = 1;
	for(int l=1; l<=n; l++)
		for(int x=1; x<=k; x++)
			if((x & 1) != (k & 1))
				ans = (ans + dp[0][l][x] * 1ll * mul[l][k-x-1 >> 1]) % mod;
	memset(dp, 0, sizeof dp);
	dp[0][0][0] = dp[0][1][1] = dp[0][1][2] = 1;
	for(int l=2; l<=n; l++)
		for(int x=2; x<k; x++)
			dp[0][l][x] = (dp[0][l-1][x-1] + dp[0][l-1][x-2]) % mod;
	for(int l=1; l<=n; l++)
		for(int x=1; x<k; x++)
			if((x & 1) == (k & 1))
				ans = (ans + dp[0][l][x] * 1ll * c[n][l]) % mod;
	if(k & 1)
	{
		for(int i=1; i<=n; i++)
			ans = (ans + c[n][i]) % mod;
	}
	cout << ans << endl;
	return 0;
}