#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int n, k, limit, f[1010][1 << 2][2010], sta[1 << 2], ans;
int main() {
  scanf("%d%d", &n, &k);
  limit = (1 << 2) - 1;
  sta[0] = 1;
  sta[1] = 2;
  sta[2] = 2;
  sta[3] = 1;
  for (int i = 0; i <= 3; i++) f[1][i][sta[i]] = 1;
  for (int i = 1; i < n; i++)
    for (int j = 0; j <= limit; j++)
      for (int l = 1; l <= k; l++)
        if (f[i][j][l]) {
          for (int p = 0; p <= limit; p++) {
            int temp = sta[p];
            if (((p >> 0 & 1) == (j >> 0 & 1))) temp--;
            if ((p >> 1 & 1) == (j >> 1 & 1)) temp--;
            temp = max(0, temp);
            f[i + 1][p][l + temp] = (f[i + 1][p][l + temp] + f[i][j][l]) % mod;
          }
        }
  for (int i = 0; i <= limit; i++) ans = (ans + f[n][i][k]) % mod;
  printf("%d\n", ans);
  return 0;
}

### Prompt

Please provide a Cpp coded solution to the problem described below:

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>

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int n, k, limit, f[1010][1 << 2][2010], sta[1 << 2], ans;
int main() {
  scanf("%d%d", &n, &k);
  limit = (1 << 2) - 1;
  sta[0] = 1;
  sta[1] = 2;
  sta[2] = 2;
  sta[3] = 1;
  for (int i = 0; i <= 3; i++) f[1][i][sta[i]] = 1;
  for (int i = 1; i < n; i++)
    for (int j = 0; j <= limit; j++)
      for (int l = 1; l <= k; l++)
        if (f[i][j][l]) {
          for (int p = 0; p <= limit; p++) {
            int temp = sta[p];
            if (((p >> 0 & 1) == (j >> 0 & 1))) temp--;
            if ((p >> 1 & 1) == (j >> 1 & 1)) temp--;
            temp = max(0, temp);
            f[i + 1][p][l + temp] = (f[i + 1][p][l + temp] + f[i][j][l]) % mod;
          }
        }
  for (int i = 0; i <= limit; i++) ans = (ans + f[n][i][k]) % mod;
  printf("%d\n", ans);
  return 0;
}

```