eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Глубина дерева

Глубина дерева

На Новый год фермер Джон решил подарить своим коровам праздничное бинарное дерево поиска (БДП)!

Чтобы сгенерировать БДП, ФД начинает с перестановки a = {a1, a2,..., an} целых чисел 1 ... n, где n300. Затем он запускает следующий псевдокод с аргументами 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) таких, что 1i < jn и ai > aj. Коровы знают, что a, которое ФД будет использовать для генерации БДП, имеет ровно k инверсий (0kn * (n1) / 2). Для всех a, удовлетворяющих этому условию, вычислить остаток от деления ∑a di(a) на m для каждого 1in.

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

Единственная строка состоит из трех целых чисел n, k и m. m является простым числом в диапазоне [108, 109 + 9].

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

Выведите n целых чисел, равных ∑a di(a) (mod m) для каждого 1in.

Пример 1

Единственной перестановкой будет a = {1, 2, 3}.

Пример 2

Имеются две перестановки a = {1, 3, 2} и a = {2, 1, 3}.

Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
3 0 192603497
Выходные данные #1
1 2 3
Входные данные #2
3 1 144408983
Выходные данные #2
3 4 4
Источник 2019 USACO Декабрь Платина