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 <algorithm>
const int mod = 924844033, MAXN = 2005;
int f[MAXN * 2][MAXN];
int fac[MAXN];
bool limited[MAXN * 2];
int n, k;
inline int addmod(int a, int b) { return (a + b) % mod; }
inline int mulmod(long long a, int b) { return (a * b) % mod; }
int main() {
	scanf("%d%d", &n, &k);
	for(int cur = 1, i = 1; i <= k; i++) {
		int len = (n - i) / k;
		cur += len + 1;
		limited[cur] = true;
		cur += len + 1;
		limited[cur] = true;
	}
	f[0][0] = f[1][0] = 1;
	for(int i = 2; i <= 2 * n; i++) {
		for(int j = 0; j <= n; j++) {
			f[i][j] = f[i - 1][j];
			if(j >= 1 && !limited[i]) f[i][j] = addmod(f[i][j], f[i - 2][j - 1]);
		}
	}
	fac[0] = 1;
	for(int i = 1; i <= n; i++) fac[i] = ((long long)fac[i - 1] * i) % mod;
	int ans = 0;
	for(int i = 1, sign = 1; i <= n; i++, sign *= -1) {
		if(sign == 1) ans = addmod(ans, mulmod(fac[n - i], f[2 * n][i]));
		else ans = addmod(ans, mod - mulmod(fac[n - i], f[2 * n][i]));
	}
	ans = addmod(fac[n], mod - ans);
	printf("%d\n", ans);
	return 0;
}