Глубина дерева
Глубина дерева
На Новый год фермер Джон решил подарить своим коровам праздничное бинарное дерево поиска (БДП)!
Чтобы сгенерировать БДП, ФД начинает с перестановки a = {a1
, a2
,..., an
} целых чисел 1 ... n, где n ≤ 300. Затем он запускает следующий псевдокод с аргументами 1 и n.
generate(l,r):
if l > r, return пустое поддерево;
x = argmin_{l <= i <= r} a_i; // индекс min a_i in {a_l,...,a_r}
return БДП с x в корне,
generate(l,x-1) как левое поддерево,
generate(x+1,r) как правое поддерево;
Например, перестановка {3, 2, 5, 1, 4} генерирует следующее БДП:
4
/ \
2 5
/ \
1 3
Пусть di(a)
обозначает глубину узла i в дереве, соответствующего a, что означает количество узлов на пути от ai
до корня. В приведенном выше примере d4(a)
= 1, d2(a)
= d5(a)
= 2, и d1(a)
= d3(a)
= 3..
Количество инверсий a равно количеству пар целых чисел (i, j) таких, что 1 ≤ i < j ≤ n и ai
> aj
. Коровы знают, что a, которое ФД будет использовать для генерации БДП, имеет ровно k инверсий (0 ≤ k ≤ n * (n − 1) / 2). Для всех a, удовлетворяющих этому условию, вычислить остаток от деления ∑a di(a)
на m для каждого 1 ≤ i ≤ n.
Входные данные
Единственная строка состоит из трех целых чисел n, k и m. m является простым числом в диапазоне [108
, 109
+ 9].
Выходные данные
Выведите n целых чисел, равных ∑a di(a)
(mod m) для каждого 1 ≤ i ≤ n.
Пример 1
Единственной перестановкой будет a = {1, 2, 3}.
Пример 2
Имеются две перестановки a = {1, 3, 2} и a = {2, 1, 3}.
3 0 192603497
1 2 3
3 1 144408983
3 4 4