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
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream>
#include <random>
#include<map>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <cassert>
#include<fstream>
#include <unordered_map>
#include <cstdlib>
#include <complex>
#include <cctype>
#include <bitset>
using namespace std;
typedef string::const_iterator State;
#define Ma_PI 3.141592653589793
#define eps 1e-5
#define LONG_INF 1e18
#define GOLD 1.61803398874989484820458
#define MAX_MOD 1000000007LL
#define MOD 998244353LL
#define seg_size 262144*4
#define REP(a,b) for(long long a = 0;a < b;++a)



long long dp[3010][6010] = {};
long long powing(long long a, long long b) {
	long long ans = 1;
	while (b != 0) {
		if (b % 2 == 1) {
			ans *= a;
			ans %= MOD;
		}
		a *= a;
		a %= MOD;
		b /= 2;
	}
	return ans;
}
long long inv(long long now) {
	return powing(now, MOD - 2);
}
long long omote[20000];
long long gyaku[20000];
long long combination(long long a, long long b) {
	long long ans = omote[a];
	ans *= gyaku[b];
	ans %= MOD;
	ans *= gyaku[a - b];
	ans %= MOD;
	return ans;
}
long long hype(long long a, long long b) {
	return combination(a + b - 1, b);
}
int main(){
	int n, x;
	cin >> n >> x;
	omote[0] = 1;
	gyaku[0] = 1;
	for (long long i = 1; i < 20000; ++i) {
		omote[i] = omote[i - 1] * i;
		omote[i] %= MOD;
		gyaku[i] = inv(omote[i]);
	}
	dp[0][0] = 1;
	for (int i = 0; i < n; ++i) {
		for (int q = 0; q < x; ++q) {
			if (dp[i][q] == 0) continue;
			dp[i + 1][q + 1] += dp[i][q];
			dp[i + 1][q + 2] += dp[i][q];
			dp[i + 1][q + 1] %= MOD;
			dp[i + 1][q + 2] %= MOD;
		}
	}
	long long ans = 0;
	for (int i = 0; i <= n; ++i) {
		for (int q = 0; q < x; ++q) {
			if (dp[i][q] == 0) continue;
			ans += dp[i][q] * hype(i+1, n - i);
			ans %= MOD;
		}
	}
	if (x % 2 == 1) {
		for (int i = (x + 1) / 2; i <= n; ++i) {
			ans += hype(i + 1, n - i);
			ans %= MOD;
		}
	}
	for (int i = 1;; ++i) {
		long long target = x - 1 - 2 * i;
		if (target <= 0) break;
		for (int two = 0;; ++two) {
			long long remaining = target - 2 * two;
			if (remaining <= 0) break;
			long long cnt = i * 2 + two + remaining;
			if (cnt > n) continue;
			long long hoge = hype(cnt + 1, n - cnt) * combination(two + remaining, two);
			ans += hoge;
			ans %= MOD;
		}
	}
	cout << ans << endl;
}