You are given a grid, consisting of 2 rows and n columns. Each cell of this grid should be colored either black or white.

Two cells are considered neighbours if they have a common border and share the same color. Two cells A and B belong to the same component if they are neighbours, or if there is a neighbour of A that belongs to the same component with B.

Let's call some bicoloring beautiful if it has exactly k components.

Count the number of beautiful bicolorings. The number can be big enough, so print the answer modulo 998244353.

Input

The only line contains two integers n and k (1 ≤ n ≤ 1000, 1 ≤ k ≤ 2n) — the number of columns in a grid and the number of components required.

Output

Print a single integer — the number of beautiful bicolorings modulo 998244353.

Examples

Input

3 4


Output

12


Input

4 1


Output

2


Input

1 2


Output

2

Note

One of possible bicolorings in sample 1:

<image>
#include <bits/stdc++.h>
using namespace std;
long long arr[1005][2005][4];
long long get(long long k, long long l) {
  switch (k) {
    case 0:
      switch (l) {
        case 0:
          return 0;
        case 1:
          return 1;
        case 2:
          return 1;
        case 3:
          return 1;
      }
    case 1:
      switch (l) {
        case 0:
          return 0;
        case 1:
          return 0;
        case 2:
          return 2;
        case 3:
          return 0;
      }
    case 2:
      switch (l) {
        case 0:
          return 0;
        case 1:
          return 2;
        case 2:
          return 0;
        case 3:
          return 0;
      }
    case 3:
      switch (l) {
        case 0:
          return 1;
        case 1:
          return 1;
        case 2:
          return 1;
        case 3:
          return 0;
      }
  }
}
long long add(long long x, long long y) { return (x + y) % 998244353; }
long long N, K;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  arr[1][1][0] = 1;
  arr[1][1][3] = 1;
  arr[1][2][2] = 1;
  arr[1][2][1] = 1;
  for (long long i = 2; i <= 1000; i++) {
    for (long long j = 1; j <= 2 * i; j++) {
      for (long long k = 0; k < 4; k++) {
        for (long long l = 0; l < 4; l++) {
          long long x = get(k, l);
          arr[i][j + x][l] = add(arr[i][j + x][l], arr[i - 1][j][k]);
        }
      }
    }
  }
  cin >> N >> K;
  cout << add(arr[N][K][0], add(arr[N][K][1], add(arr[N][K][2], arr[N][K][3])))
       << "\n";
  return 0;
}
