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 Y second
#define pb emplace_back
#define FOR(i,a,b) for(int (i)=(a);i<(b);++(i))
#define EFOR(i,a,b) for(int (i)=(a);i<=(b);++(i))
#define rep(X,Y) for (int (X) = 0;(X) < (Y);++(X))
#define reps(X,S,Y) for (int (X) = S;(X) < (Y);++(X))
#define rrep(X,Y) for (int (X) = (Y)-1;(X) >=0;--(X))
#define rreps(X,S,Y) for (int (X) = (Y)-1;(X) >= (S);--(X))
#define all(X) (X).begin(),(X).end()
#define rall(X) (X).rbegin(),(X).rend()
#define eb emplace_back
#define UNIQUE(X) (X).erase(unique(all(X)),(X).end())

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef ll LL;
typedef pii PII;
typedef pll PLL;
template<class T> using vv=vector<vector<T>>;
template<class T> inline bool MX(T &l,const T &r){return l<r?l=r,1:0;}
template<class T> inline bool MN(T &l,const T &r){return l>r?l=r,1:0;}
const ll MOD=998244353;

int N;
int X;
LL conv[6145];
LL memo[6145][6145];
LL num[6145][6145];
LL num2[6145][6145];

LL Comb(int n, int r) {
  if (n < 0 || r < 0 || n < r) return 0;
  if (n == r || r == 0) return 1;
  if (memo[n][r] != -1) return memo[n][r];
  return memo[n][r] = (Comb(n-1, r) + Comb(n-1, r-1)) % MOD;
}

LL f(int s, int t) {
  return Comb(s+t, t);
}

LL Conv(int l, int r) {
  assert(l <= r);
  LL ret = conv[r];
  if (l > 0) ret += MOD-conv[l-1];
  return ret%MOD;
}

int main() {
  fill(memo[0], memo[6145], -1);
  scanf("%d%d", &N, &X);

  rep(i, N+1) {
    conv[i] = f(N-i, i);
    if (i > 0) conv[i] = (conv[i-1]+conv[i]) % MOD;
  }

  num[0][0] = 1;
  num2[0][0] = 1;
  reps(k, 1, N+1) {
    rep(S, X+1) {
      if (S >= 2) num[k][S] += num[k-1][S-2];
      if (S >= 1) num[k][S] += num[k-1][S-1];
      if (S >= 2) num2[k][S] += num2[k-1][S-2];
      if (S >= 1) num2[k][S] += num2[k-1][S-1];
      num[k][S] += num[k-1][S];
      num[k][S] %= MOD;
      num2[k][S] %= MOD;
    }
  }

  LL ans = 0;
  rep(k, N+1) {
    if (X%2 == 1 && k*2 > X) {
      ans += f(k, N-k);
      ans %= MOD;
    }
  }

  rep(S, X) {
    ans += num[N][S];
    ans %= MOD;
  } 

  reps(k, 1, N+1) {
    int d = X-2-2*k;
    if (d >= 0) {
      rep(g, N+1) {
        int r = N-(k+g+2);
        int l = max(N-(2*k+g+1), 0);
        if (r < 0) continue;

        ans += num2[g][d] * Conv(l, r);
        ans %= MOD;
      }
    }
  }
  printf("%lld\n", ans);
}
