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

Задача . I. Лестницы


Для перестановки \(p\) чисел от \(1\) до \(n\) мы можем задать лестничный массив \(a\) следующим образом: \(a_i\) равняется длине наибольшего подотрезка перестановки, который содержит позицию \(i\) и состоит из последовательных чисел в отсортированном порядке: \([x, x+1, \ldots, y-1, y]\) или \([y, y-1, \ldots, x+1, x]\) для некоторых \(x \leq y\). Например, для перестановки \(p = [4, 1, 2, 3, 7, 6, 5]\) получается лестничный массив \(a = [1, 3, 3, 3, 3, 3, 3]\).

Вам дан массив \(a\). Ваша задача — посчитать количество перестановок, лестничный массив которых равен \(a\). Так как это количество может быть достаточно большим, посчитайте его по модулю \(998\,244\,353\). Обратите внимание, что количество может быть равно нулю.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину лестничного массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

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

Выведите количество перестановок, лестничный массив которых равен \(a\). Так как это число может быть довольно большим, выведите его по модулю \(998\,244\,353\).


Примеры
Входные данныеВыходные данные
1 6
3 3 3 1 1 1
6
2 7
4 4 4 4 3 3 3
6
3 1
1
1
4 8
2 2 2 2 2 2 1 1
370
5 4
3 2 3 1
0

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

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