Глибина дерева
На Новий рік фермер Джон вирішив подарувати своїм коровам святкове бінарне дерево пошуку (БДП)!
Щоб створити БДП, фермер Джон починає з перестановки a = {a[1]
, a[2]
, ..., a[n]
} чисел від 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
Нехай d[i](a)
позначає глибину вузла i в дереві, що відповідає a, тобто кількість вузлів на шляху від a[i]
до кореня. У наведеному вище прикладі d[4](a)
= 1, d[2](a)
= d[5](a)
= 2, і d[1](a)
= d[3](a)
= 3.
Кількість інверсій a дорівнює кількості пар цілих чисел (i, j) таких, що 1 ≤ i < j ≤ n і a[i]
> a[j]
. Корови знають, що a, яке фермер Джон буде використовувати для генерації БДП, має рівно k інверсій (0 ≤ k ≤ n * (n − 1) / 2). Для всіх a, що задовольняють цій умові, обчислити залишок від ділення ∑a d[i](a)
на m для кожного 1 ≤ i ≤ n.
Вхідні дані
Єдиний рядок містить три цілі числа n, k і m. m є простим числом у діапазоні [10^8
, 10^9
+ 9].
Вихідні дані
Виведіть n цілих чисел, рівних ∑a d[i](a)
(mod m) для кожного 1 ≤ i ≤ n.
Приклад 1
Єдиною перестановкою буде a = {1, 2, 3}.
Приклад 2
Існують дві перестановки a = {1, 3, 2} і a = {2, 1, 3}.