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<bits/stdc++.h>

using namespace std;

const int N = 2005, P = 924844033;

int f[N][N][2], n, S, k, g[N], M[N], fac[N];


int main () {
	scanf("%d%d", &n, &k);
	S = (n + k - 1) / k;
	f[0][0][1] = 1;
	fac[0] = 1; for (int i = 1; i <= n; ++i) fac[i] = 1ll * fac[i - 1] * i % P;
	for (int i = 1; i <= S; ++i) {
		for (int j = 0; j <= n; ++j) {
			f[i][j][0] = (f[i - 1][j][0] + f[i - 1][j][1]) % P;
			if (j) f[i][j][1] = f[i - 1][j - 1][0];
		}
	}
	M[0] = 1;
	for (int i = min(k << 1, n), j, v, w, l; i; --i) {
		l = (n - i + k) / k + (i > k);
		memset(g, 0, sizeof g);
		for (v = l >> 1; ~v; --v) {
			w = f[l][v][0] + f[l][v][1];
			for (j = n; j >= v; --j) {
				g[j] = (1ll * M[j - v] * w + g[j]) % P;
			}
		}
		memcpy(M, g, sizeof g);
	}
	int ret = 0;
	for (int i = 0; i <= n; ++i) {
		if (i & 1) ret = (-1ll * fac[n - i] * M[i] + ret) % P;
		else ret = (1ll * fac[n - i] * M[i] + ret) % P;
	}
	printf("%d\n", (ret + P) % P);
	return 0;
}