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

Задача . D. Дружелюбные пауки


На Марсе обитает необычный вид пауков — двоичные пауки.

Прямо сейчас марсианские ученые наблюдают за колонией из \(n\) пауков, \(i\)-й из которых имеет \(a_i\) лапок.

Некоторые пауки дружат между собой. А именно, \(i\)-й и \(j\)-й пауки являются друзьями, если \(\gcd(a_i, a_j) \ne 1\), т. е. существует некоторое число \(k \ge 2\) такое, что \(a_i\) и \(a_j\) одновременно делятся на \(k\) без остатка. Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Ученые обнаружили, что пауки могут передавать сообщения. Если два паука являются друзьями, то тогда они могут передать сообщение напрямую за одну секунду. Иначе паук должен передать сообщение своему другу, тот, в свою очередь, должен передать сообщение своему другу, и так далее, пока сообщение не дойдет до адресата.

Рассмотрим пример.

Пусть паук с восемью лапками хочет передать сообщение пауку с \(15\)-ю лапками. Напрямую он этого сделать не может, потому что \(\gcd(8, 15) = 1\). Зато он может передать сообщение через паука с шестью лапками, поскольку \(\gcd(8, 6) = 2\) и \(\gcd(6, 15) = 3\). Таким образом, сообщение дойдет за две секунды.

Прямо сейчас ученые наблюдают, как \(s\)-й паук хочет передать сообщение \(t\)-му пауку. У исследователей есть гипотеза, что пауки всегда передают сообщения оптимально. По этой причине ученым потребуется программа, которая смогла бы вычислить минимальное время передачи сообщения, а также вывести один из оптимальных маршрутов.

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

В первой строке входных данных находится целое число \(n\) (\(2 \le n \le 3\cdot10^5\)) — количество пауков в колонии.

Во второй строке входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 3\cdot10^5\)) — количество лапок у пауков.

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

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

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

Иначе в первой строке выходных данных выведите целое число \(t\) (\(t \ge 1\)) — количество пауков, которые участвуют в передаче сообщения (т. е. минимальное время доставки сообщения в секундах плюс один). Во второй строке выведите \(t\) различных целых чисел \(b_1, b_2, \ldots, b_t\) (\(1 \le b_i \le n\)) — номера пауков, через которых должно следовать сообщение, в порядке его следования от отправителя к получателю.

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

Примечание

Первый пример разобран выше. В нем видно, что сообщение от паука номер \(5\) (с восемью лапками) к пауку номер \(6\)\(15\)-ю лапками) оптимально передать через паука номер \(4\) (с шестью лапками).

Во втором примере паук номер \(7\)\(11\) лапками) ни с кем не дружит, поэтому ему невозможно передать сообщение.


Примеры
Входные данныеВыходные данные
1 7
2 14 9 6 8 15 11
5 6
3
5 4 6
2 7
2 14 9 6 8 15 11
5 7
-1
3 7
2 14 9 6 8 15 11
5 5
1
5

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

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