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

Задача . D. Двоичные пауки


На Марсе обитает необычный вид пауков — Двоичные пауки. Они плетут паутину, чтобы защищаться от врагов.

Чтобы сплести паутину, пауки объединяются в пары. При этом, если у первого паука в паре \(x\) лапок, а у второго — \(y\) лапок, то у них выходит паутина прочностью \(x \oplus y\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Двоичные пауки живут большими группами. Сейчас Вы наблюдаете за группой из \(n\) пауков, причем \(i\)-й паук имеет \(a_i\) лапок.

Когда группе пауков грозит опасность, то некоторые из них становятся защитниками. Защитники выбираются следующим образом. Во-первых, должно быть как минимум два паука-защитника. Во-вторых, любая пара из пауков-защитников должна уметь сплести паутину прочностью хотя бы \(k\). В-третьих, защитников должно быть как можно больше.

Ученые долго исследовали поведение Двоичных пауков и выдвинули гипотезу, что они всегда могут выбрать защитников оптимальным образом, удовлетворяя при этом условиям выше. Вам предстоит проверить эту гипотезу на группе пауков. Для этого надо понять, сколько пауков должны стать защитниками. А поскольку Вы не являетесь Двоичным пауком, то Вы решили прибегнуть к помощи компьютера и написать программу, которая решает эту непростую задачу.

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

В первой строке входных данных находится два целых числа \(n\) и \(k\) (\(2 \le n \le 3\cdot10^5\), \(0 \le k \le 2^{30} - 1\)) — количество пауков в группе и минимальная допустимая прочность паутины.

Во второй строке входных данных находится \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 2^{30}-1\)) — количество лапок у \(i\)-го паука.

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

В первой строке выведите целое число \(\ell\) (\(2 \le \ell \le n\)) — максимально возможное количество пауков-защитников.

Во второй строке выведите через пробел \(\ell\) различных целых чисел \(b_i\) (\(1 \le b_i \le n\)) — номера пауков, которые станут защитниками.

Если существует несколько способов выбрать защитников, то выведите любой из них.

Увы, может получиться и так, что собрать защитников невозможно. В таком случае требуется вывести единственное число \(-1\).

Примечание

Рассмотрим пример из условия.

В первом примере группа пауков выглядит следующим образом:

Возьмем трех пауков: с двумя, десятью и \(16\)-ю лапками. Тогда нетрудно видеть, что каждая пара сможет сплести достаточно прочную паутину, т. к. \(2 \oplus 10 = 8 \ge 8\), \(2 \oplus 16 = 18 \ge 8\) и \(10 \oplus 16 = 26 \ge 8\).

Данный вариант выбора не единственный: можно, к примеру, выбрать трех пауков с номерами \(3\), \(4\) и \(6\).

Во втором примере никакая пара пауков не сможет сплести паутину прочностью \(1024\) или больше, поэтому ответ \(-1\).


Примеры
Входные данныеВыходные данные
1 6 8
2 8 4 16 10 14
3
1 5 4
2 6 1024
1 2 3 1 4 0
-1

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

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