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 <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define MOD 924844033
#define MX 2003

using namespace std;

typedef long long ll;

int N, K;
int LEN[MX], NUM;
ll FAC[MX], FACI[MX];
ll F[MX][MX], G[MX];

ll qpow(ll x, ll t)
{
	ll ans = 1;
	while(t)
	{
		if(t & 1) ans = ans*x%MOD;
		x = x*x%MOD;
		t >>= 1;
	}
	return ans;
}

ll inv(ll x)
{
	return qpow(x, MOD-2);
}

ll C(int n, int m)
{
	if(n<0 || m<0 || n<m) return 0;
	else return FAC[n] * FACI[m]%MOD * FACI[n-m]%MOD;
}

void init()
{
	FAC[0] = 1;
	for(int i=1; i<=N; i++) FAC[i] = FAC[i-1] * i % MOD;
	FACI[N] = inv(FAC[N]);
	for(int i=N-1; i>=0; i--) FACI[i] = FACI[i+1] * (i+1) % MOD;
}

int main()
{
	scanf("%d%d", &N, &K);
	init();
	for(int i=1; i<=K&&i<=N-K; i++)
		LEN[++NUM] = (N-K-i)/K+1,
		LEN[++NUM] = (N-K-i)/K+1;
	F[0][0] = 1;
	for(int i=1; i<=NUM; i++)
		for(int j=0; j<=N; j++)
			for(int k=0; k<=j&&k<=((LEN[i]+1)>>1); k++)
				F[i][j] = (F[i][j] + F[i-1][j-k] * C(LEN[i]-k+1, k))%MOD;
	for(int i=N; i>=0; i--)
	{
		G[i] = F[NUM][i] * FAC[N-i] % MOD;
		G[i] = (G[i] - G[i+1] + MOD) % MOD;
	}
	printf("%lld\n", G[0]);
	return 0;
}