Problem: Snuke loves permutations. He is making a permutation of length N.

Since he hates the integer K, his permutation will satisfy the following:

* Let the permutation be a_1, a_2, ..., a_N. For each i = 1,2,...,N, |a_i - i| \neq K.



Among the N! permutations of length N, how many satisfies this condition?

Since the answer may be extremely large, find the answer modulo 924844033(prime).

Constraints

* 2 ≦ N ≦ 2000
* 1 ≦ K ≦ N-1

Input

The input is given from Standard Input in the following format:


N K


Output

Print the answer modulo 924844033.

Examples

Input

3 1


Output

2


Input

4 1


Output

5


Input

4 2


Output

9


Input

4 3


Output

14


Input

425 48


Output

756765083

Solution (in CPP):

Solution:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define repu(i,x,y) for (int i=x; i<=y; ++i)
using namespace std;

typedef long long LL;
const int p=924844033;
int n,k,f[2010],g[1010][2][2010],ans;

void dp(int m,bool fst,bool lst)
{
    memset(g,0,(m+5)*sizeof(g[0]));
    memcpy(g[0][!fst],f,sizeof(f));
    repu(i,0,m-1)
        repu(j,0,n)
            if (g[i][0][j] || g[i][1][j])
            {
                g[i+1][0][j]=(LL(g[i+1][0][j])+g[i][0][j]+g[i][1][j])%p;
                (g[i+1][0][j+1]+=g[i][0][j])%=p;
                g[i+1][1][j+1]=(LL(g[i+1][1][j+1])+g[i][0][j]+g[i][1][j])%p;
            }
    repu(i,0,n)
    {
        f[i]=g[m][0][i];
        if (lst)
            (f[i]+=g[m][1][i])%=p;
    }
}

int main()
{
    scanf("%d%d",&n,&k),f[0]=1;
    repu(i,1,min(n,k*2))
        dp((n-i)/k/2+1,i>k,(n-i)%(k*2)>=k);
    int t=1;
    repu(i,0,n)
    {
        if ((n-i)&1)
            ans=(ans+p-LL(t)*f[n-i]%p)%p;
        else
            ans=(ans+LL(t)*f[n-i])%p;
        t=LL(i+1)*t%p;
    }
    printf("%d\n",ans);
    return 0;
}