#include<cstdio>
#define M 16384
#define p 998244353
#define ll long long
inline int mod(int x){return x<p?x:x-p;}
inline int calc(int x,int y)
{
    int z=1;
    for(;y;x=(ll)x*x%p,y>>=1)if(y&1)z=(ll)x*z%p;
    return z;
}
int i,j,k,f[M],o,q,w[M|1],x,y,z;
inline void swap(int&u,int&v){z=u,u=v,v=z;}
inline void NTT(int*a,int s)
{
    for(i=0;i<q;i++)if(f[i]>i)swap(a[f[i]],a[i]);
    for(i=1;i<q;i<<=1)for(j=0,k=i,s>>=1;k<q;j+=i,k+=i)for(z=q&s;k&i;z+=s)x=a[j],y=(ll)a[k]*w[z]%p,a[j++]=mod(x+y),a[k++]=mod(p+x-y);
    if(s<0)for(i=0;i<q;i++)a[i]=(ll)a[i]*o%p;
}
int a[M],b[M],c[M],d[M],e[M],m,n;
int main()
{
    for(scanf("%d%d",&n,&m),q=1;q<=n<<1;q<<=1)o++;
    for(z=calc(3,p>>o--),i=*w=w[q]=1;i<q;i++)f[i]=f[i>>1]>>1|(i&1)<<o,w[i]=(ll)w[i-1]*z%p;
    for(*a=a[1]=*b=b[1]=1,i=2;i<=n+2;i++)a[i]=(ll)a[i-1]*i%p,b[i]=(ll)(p-p/i)*b[p%i]%p;
    for(i=2,o=calc(q,p-2);i<=n+2;i++)b[i]=(ll)b[i-1]*b[i]%p;
    for(i=0;i<=n;i++)c[i]=b[i+2];
    for(NTT(c,q),*d=1;m;m--)
    {
        for(i=0;i<=n;i++)e[i]=(ll)d[i]*b[i]%p,d[i]=(ll)d[i]*(p-i)%p;
        for(NTT(e,q),i=0;i<q;i++)e[i]=(ll)c[i]*e[i]%p;
        for(NTT(e,-q),i=0;i<=n;i++)d[i]=(d[i]+(ll)e[i]*a[i+2])%p,e[n+i+1]=0;
    }
    for(i=x=0;i<=n;i++)x=(x+(ll)b[i]*b[n-i]%p*a[n]%p*d[i])%p;
    return 0&printf("%d\n",x);
}
### Prompt

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

We have an N \times M grid. The square at the i-th row and j-th column will be denoted as (i,j). Particularly, the top-left square will be denoted as (1,1), and the bottom-right square will be denoted as (N,M). Takahashi painted some of the squares (possibly zero) black, and painted the other squares white.

We will define an integer sequence A of length N, and two integer sequences B and C of length M each, as follows:

* A_i(1\leq i\leq N) is the minimum j such that (i,j) is painted black, or M+1 if it does not exist.
* B_i(1\leq i\leq M) is the minimum k such that (k,i) is painted black, or N+1 if it does not exist.
* C_i(1\leq i\leq M) is the maximum k such that (k,i) is painted black, or 0 if it does not exist.



How many triples (A,B,C) can occur? Find the count modulo 998244353.

Constraints

* 1 \leq N \leq 8000
* 1 \leq M \leq 200
* N and M are integers.



Partial Score

* 1500 points will be awarded for passing the test set satisfying N\leq 300.

Constraints

* 1 \leq N \leq 8000
* 1 \leq M \leq 200
* N and M are integers.

Input

Input is given from Standard Input in the following format:


N M

Output

Print the number of triples (A,B,C), modulo 998244353.

Examples

Input

2 3


Output

64


Input

4 3


Output

2588


Input

17 13


Output

229876268


Input

5000 100


Output

57613837

### Response

```cpp
#include<cstdio>
#define M 16384
#define p 998244353
#define ll long long
inline int mod(int x){return x<p?x:x-p;}
inline int calc(int x,int y)
{
    int z=1;
    for(;y;x=(ll)x*x%p,y>>=1)if(y&1)z=(ll)x*z%p;
    return z;
}
int i,j,k,f[M],o,q,w[M|1],x,y,z;
inline void swap(int&u,int&v){z=u,u=v,v=z;}
inline void NTT(int*a,int s)
{
    for(i=0;i<q;i++)if(f[i]>i)swap(a[f[i]],a[i]);
    for(i=1;i<q;i<<=1)for(j=0,k=i,s>>=1;k<q;j+=i,k+=i)for(z=q&s;k&i;z+=s)x=a[j],y=(ll)a[k]*w[z]%p,a[j++]=mod(x+y),a[k++]=mod(p+x-y);
    if(s<0)for(i=0;i<q;i++)a[i]=(ll)a[i]*o%p;
}
int a[M],b[M],c[M],d[M],e[M],m,n;
int main()
{
    for(scanf("%d%d",&n,&m),q=1;q<=n<<1;q<<=1)o++;
    for(z=calc(3,p>>o--),i=*w=w[q]=1;i<q;i++)f[i]=f[i>>1]>>1|(i&1)<<o,w[i]=(ll)w[i-1]*z%p;
    for(*a=a[1]=*b=b[1]=1,i=2;i<=n+2;i++)a[i]=(ll)a[i-1]*i%p,b[i]=(ll)(p-p/i)*b[p%i]%p;
    for(i=2,o=calc(q,p-2);i<=n+2;i++)b[i]=(ll)b[i-1]*b[i]%p;
    for(i=0;i<=n;i++)c[i]=b[i+2];
    for(NTT(c,q),*d=1;m;m--)
    {
        for(i=0;i<=n;i++)e[i]=(ll)d[i]*b[i]%p,d[i]=(ll)d[i]*(p-i)%p;
        for(NTT(e,q),i=0;i<q;i++)e[i]=(ll)c[i]*e[i]%p;
        for(NTT(e,-q),i=0;i<=n;i++)d[i]=(d[i]+(ll)e[i]*a[i+2])%p,e[n+i+1]=0;
    }
    for(i=x=0;i<=n;i++)x=(x+(ll)b[i]*b[n-i]%p*a[n]%p*d[i])%p;
    return 0&printf("%d\n",x);
}
```