Олимпиадный тренинг

Задача . F. MEX подсчет


Для массива \(c\) неотрицательных целых чисел, \(MEX(c)\) обозначает наименьшее неотрицательное целое число, которое в нем не встречается. Например, \(MEX([0, 1, 3]) = 2\), \(MEX([42]) = 0\).

Вам даны целые числа \(n, k\) и массив \([b_1, b_2, \ldots, b_n]\).

Найдите количество массивов \([a_1, a_2, \ldots, a_n]\), для которых выполняются следующие условия:

  • \(0 \le a_i \le n\) для каждого \(i\) для каждого \(i\) от \(1\) до \(n\).

  • \(|MEX([a_1, a_2, \ldots, a_i]) - b_i| \le k\) для каждого \(i\) от \(1\) до \(n\).

Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n, k\) (\(1 \le n \le 2000\), \(0 \le k \le 50\)).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-k \le b_i \le n+k\)) — элементы массива \(b\).

Выходные данные

Выведите одно целое число — количество массивов, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).


Примеры
Входные данныеВыходные данные
1 4 0
0 0 0 0
256
2 4 1
0 0 0 0
431
3 4 1
0 0 1 1
509
4 5 2
0 0 2 2 0
6546
5 3 2
-2 0 4
11

time 4000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя