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>
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Stack;

public class Main {

    PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    private static boolean debug = false;

    private String nextString() {
        StringBuilder sb = new StringBuilder();
        try {
            char c = (char) System.in.read();
            while (c == ' ' || c == '\n' || c == '\t') {
                c = (char) System.in.read();
            }
            do {
                sb.append(c);
                c = (char) System.in.read();
            } while (c != ' ' && c != '\n' && c != '\t');
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    private int nextInt() {
        int r = 0;
        boolean f = false;
        try {
            int c = System.in.read();
            while (c < '0' || c > '9') {
                if (c == '-') {
                    f = true;
                }
                c = System.in.read();
            }
            while (c >= '0' && c <= '9') {
                r = r * 10 + c - '0';
                c = System.in.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (f) {
            r *= -1;
        }
        return r;
    }

    private long nextLong() {
        long r = 0;
        boolean f = false;
        try {
            int c = System.in.read();
            while (c < '0' || c > '9') {
                if (c == '-') {
                    f = true;
                }
                c = System.in.read();
            }
            while (c >= '0' && c <= '9') {
                r = r * 10 + c - '0';
                c = System.in.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (f) {
            r *= -1;
        }
        return r;
    }

    private void println(String s) {
        out.write(s);
        out.write('\n');
        out.flush();
    }

    private void print(String s) {
        out.write(s);
        out.flush();
    }

    private void println(long s) {
        println(String.valueOf(s));
    }

    public class AVL<T> {

        private Node<T> root = null;
        private final Comparator<T> comparator;

        public AVL(Comparator<T> comparator) {
            this.comparator = comparator;
        }

        public void insert(T v) {
            if (root == null) {
                root = new Node<>(v, this.comparator);
            } else {
                root = root.insert(v);
            }
        }

        public int gt(T v) {
            return root == null ? 0 : root.gt(v);
        }

        public class Node<T> {
            T v;
            Comparator<T> comparator;
            int size = 1;
            int dep = 1;
            Node<T> lc = null;
            Node<T> rc = null;

            public Node(T v, Comparator<T> comparator) {
                this.v = v;
                this.comparator = comparator;
            }

            private int getDep(Node node) {
                return node == null ? 0 : node.dep;
            }

            private int getSize(Node node) {
                return node == null ? 0 : node.size;
            }

            public Node<T> insert(T v) {
                Node<T> rt = this;
                if (comparator.compare(v, this.v) >= 0) {
                    if (this.rc == null) {
                        this.rc = new Node<>(v, this.comparator);
                    } else {
                        this.rc = this.rc.insert(v);
                    }
                } else {
                    if (this.lc == null) {
                        this.lc = new Node<>(v, this.comparator);
                    } else {
                        this.lc = this.lc.insert(v);
                    }
                }
                if (getDep(this.lc) > getDep(this.rc) + 1) {
                    Node<T> lc = this.lc;
                    this.lc = lc.rc;
                    lc.rc = this;
                    this.update();
                    lc.update();
                    rt = lc;
                } else if (getDep(this.rc) > getDep(this.lc) + 1) {
                    Node<T> rc = this.rc;
                    this.rc = rc.lc;
                    rc.lc = this;
                    this.update();
                    rc.update();
                    rt = rc;
                } else {
                    this.update();
                }
                return rt;
            }

            private void update() {
                this.dep = Math.max(getDep(this.rc), getDep(this.lc)) + 1;
                this.size = getSize(this.rc) + getSize(this.lc) + 1;
            }

            public int gt(T v) {
                if (comparator.compare(v, this.v) >= 0) {
                    return this.rc == null ? 0 : this.rc.gt(v);
                } else {
                    return getSize(this.rc) + 1 + (this.lc == null ? 0 : this.lc.gt(v));
                }
            }
        }

    }

    public static void main(String[] args) {
        new Main().resolve();
    }

    private void resolve() {
        int n = nextInt();
        int k = nextInt();
        int md = 998244353;
        long[][][] dp = new long[2][4][k + 2];
        int pre = 0;
        int cur = 1;
        for (int ii = 0; ii < 4; ii++) {
            for (int jj = 0; jj <= k; jj++) {
                dp[pre][ii][jj] = 0;
            }
        }
        dp[pre][0][1] = 1;
        dp[pre][3][1] = 1;
        dp[pre][2][2] = 1;
        dp[pre][1][2] = 1;
        for (int i = 1; i < n; i++) {
            for (int ii = 0; ii < 4; ii++) {
                for (int jj = 0; jj <= k; jj++) {
                    dp[cur][ii][jj] = 0;
                }
            }
            for (int ii = 0; ii < 4; ii++) {
                for (int jj = 0; jj <= k; jj++) {
                    for (int mm = 0; mm < 4; mm++) {
                        int kk = jj + cal(ii, mm);
                        if (kk <= k) {
                            dp[cur][mm][kk] = (dp[cur][mm][kk] + dp[pre][ii][jj]);
                            if (dp[cur][mm][kk] >= md) {
                                dp[cur][mm][kk] -= md;
                            }
                        }
                    }
                }
            }

            int cc = cur;
            cur = pre;
            pre = cc;
        }

        long ans = 0;
        for (int i = 0; i < 4; i++) {
            ans = ans + dp[pre][i][k];
            if (ans > md) {
                ans -= md;
            }
        }
        println(ans);
    }

    private int cal(int ii, int mm) {
        if (ii == 0) {
            if (mm == 0) {
                return 0;
            } else {
                return 1;
            }
        } else if (ii == 1) {
            if (mm == 2) {
                return 2;
            } else {
                return 0;
            }
        } else if (ii == 2) {
            if (mm == 1) {
                return 2;
            } else {
                return 0;
            }
        } else {
            if (mm == 3) {
                return 0;
            } else {
                return 1;
            }
        }
    }
}
