Problem D. Diversify start positions

Author:I. Tuphanov   Time limit:1 sec
Input file:input.txt   Memory limit:256 Mb
Output file:output.txt  

Statement

New Vasuki Challenge (NVC) is a race developed to make New Vasuki a new racing capital of the world. An outstanding feature of NVC is the distribution of start positions.

Let n be the number of cars taking place in NVC during the whole season. Each car has its id — integer number in range from 1 to n. A season consists of x races. Before a race each car takes a start position. There are n start positions, numbered from 1 to n.

In the beginning of a new season NVC director declares a permutation P = (p1, p2, …, pn). Before the first race car number i takes start position number i for each i from 1 to n. Before each next race start positions are permuted according to P: car which was on start position pi in the last race now goes to start position i.

Say, n = 6, x = 3, P = (4, 3, 6, 5, 1, 2). So, there will be three races and cars will stand in positions (1, 2, 3, 4, 5, 6) before the first race, (4, 3, 6, 5, 1, 2) before the second race, and (5, 6, 2, 1, 4, 3) before the third race.

A permutation P of size n is called feasible for given x iff:

For the example given above, (4, 3, 6, 5, 1, 2) is feasible because all three start position distributions are different, and if there were a forth race the distribution would be (1, 2, 3, 4, 5, 6) which already met in the first race.

Your task is to find a feasible permutation P for given n and x. If there are multiple solutions, output any of them.

Input file format

Input file contains two integers n and x.

Output file format

Output file must contain a feasible permutation. If a feasible permutation doesn't exist, output a single integer  − 1.

Constraints

2 ≤ n ≤ 103

2 ≤ x ≤ 106

Sample tests

No. Input file (input.txt) Output file (output.txt)
1
6 3
4 3 6 5 1 2

Explanation

Переформулируем задачу. Необходимо сгенерировать перестановку P порядка n. Условия, которые накладываются на перестановку P таковы:

Рассмотрим циклы перестановки P. Обозначим их длины через ni, а их количество через k. То есть, n1 + …  + nk = n. Каждое очередное применение перестановки сдвигает циклы. Перестановка P, применённая к единичной ni раз возвращает все элементы i-ого цикла на свои места. Таким образом, первая повторившаяся перестановка будет единичной (I) и возникнет она когда все циклы прокрутятся на полные обороты. То есть, x должно быть минимальным положительным числом, делящимся на все ni, то есть их НОК.

Таким образом, если найдётся перестановка с разбиением на циклы таким, что НОК их длин будет составлять x, она будет являться решением задачи. С другой стороны, по разбиению на циклы несложно сгенерировать и саму перестановку. Так, например, цикл длины m представляет собой перестановку вида 2, 3, …, m, 1. Итак, исходная задача эквивалентная следующей: необходимо разбить число n на слагаемые ni, так чтобы их НОК был равен x.

Для решения получившейся задачи рассмотрим разложение числа x на простые множители. Поскольку НОК набора чисел представляет собой произведение всех простых множителей из этого набора, взятых со максимальными по всему набору степенями, справедливы следующие утверждения:

Из приведённых утверждений следует, в частности, что все ni должны быть делителями x.

Применим метод динамического программирования. Будем формировать числа ni одно за другим. Рассмотрим k-ый шаг алгоритма. К этому моменту уже сформирован набор Sk = {n1, n2, …, nk − 1} и на текущем шаге следует выбрать число nk. При этом, вне зависимости от конкретного набора Sk текущее состояние может быть описано двумя числами: текущей частичной суммой n1 + n2 + …  + nk − 1 и битовой маской, в которой для каждого простого числа p, входящего в разложение x со степенью alfa установлена единица тогда и только тогда, когда в наборе Sk имеется число, делящееся на palfa.

Оценим количество состояний. Первое число (текущая частичная сумма) не может превосходить n, в то время как максимальное число бит в битовой маске соответствует максимальному количеству различных простых делителей числа x и при ограничениях задачи не может превосходить 7. Итого, имеем не более (1000 + 1)27 состояний. Для оптимизации количества переходов можно перебирать не все возможные nk, а только делители числа x. При такой реализации решение с запасом укладывается и по времени, и по памяти.


0.111s 0.011s 13