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 MAX_N = 4000 + 5, MOD = 924844033;
int fac[MAX_N] = {1}, head[MAX_N], dp[MAX_N][MAX_N], m[MAX_N], n, k;
bool mark[MAX_N];

int dfs(int v) {
	mark[v] = true;
	int t = v + (v < n? +1: -1) * n;
	vector<int> adj = {t - k, t + k};
	int res = 1;
	for (int u: adj)
		if (u >= 0 && u < 2 * n && ((v < n) != (u < n)) && !mark[u]) 
			res += dfs(u);
	return res;
}

void find_m() {
	int sz = 0;
	for (int i = 0; i < 2 * n; i++)
		if (!mark[i]) {
			head[sz + 1] = true;
			sz += dfs(i) - 1;
		}
	for (int i = 0; i <= sz; i++)
		dp[0][i] = 1;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= sz; j++)
			dp[i][j] = (dp[i][j - 1] + dp[i - 1][j - 2 + head[j]]) % MOD;
	for (int i = 0; i <= n; i++)
		m[i] = dp[i][sz];
}

int main() {
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
		fac[i] = 1LL * fac[i - 1] * i % MOD;
	find_m();
	int ans = 0;
	for (int i = 0, s = 1; i <= n; i++, s *= -1)
		ans = (ans + 1LL * s * m[i] * fac[n - i]) % MOD;
	cout << (ans + MOD) % MOD;
}