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 <cstring>
#include <cstdio>
#define MOD 924844033
int dp[2005][2005][2];
int main()
{
	// freopen("AGC005-D.in", "r", stdin);
	int n, k, cur = 0;
	scanf("%d%d", &n, &k);
	dp[0][0][0] = 1;
	for (int i = 0; i < k << 1; i++)
	{
		for (int j = i; j < n; j += k << 1)
		{
			int nxt = cur ^ 1;
			memset(dp[nxt], 0, sizeof(dp[nxt]));
			dp[nxt][0][0] = 1;
			for (int x = 1; x <= n; x++)
			{
				dp[nxt][x][0] = (dp[cur][x][0] + dp[cur][x][1]) % MOD;
				if (j >= k)
					(dp[nxt][x][0] += dp[cur][x - 1][0]) %= MOD;
				if (j + 2 * k < n)
				{
					(dp[nxt][x][1] += dp[cur][x - 1][0]) %= MOD;
					(dp[nxt][x][1] += dp[cur][x - 1][1]) %= MOD;
				}
				else if (j + k < n)
				{
					(dp[nxt][x][0] += dp[cur][x - 1][0]) %= MOD;
					(dp[nxt][x][0] += dp[cur][x - 1][1]) %= MOD;
				}
			}
			cur ^= 1;
		}
	}
	int ans = 0;
	for (int i = 0; i <= n; i++)
	{
		int res = dp[cur][i][0];
		for (int j = 1; j <= n - i; j++)
			res = (long long)res * j % MOD;
		(ans += (i & 1 ? -1 : 1) * res) %= MOD;
	}
	printf("%d\n", (ans + MOD) % MOD);
	return 0;
}