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

Задача . D. Восстановление BST


Хомяк Дима обожает грызть различные объекты, среди которых клетки, коробки, авторы плохих задач и даже деревья!

Недавно он обнаружил двоичное дерево поиска и тут же сгрыз все его ребра, в результате чего вершины дерева перемешались в случайном порядке. Дима знает, что если Андрей, который кропотливо строил дерево на протяжении долгого времени, придет и увидит, что все разрушено, то он очень расстроится. По счастью, прежде чем сгрызть все ребра, Дима заметил, что для любых двух вершин, соединенных ребром, наибольший общий делитель их значений превосходит \(1\).

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

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

В первой строке задано количество вершин \(n\) (\(2 \le n \le 700\)).

В следующей строке через пробел следуют \(n\) различных чисел \(a_i\) (\(2 \le a_i \le 10^9\)) — значения в вершинах в отсортированном порядке.

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

Если можно собрать двоичное дерево поиска, такое что наибольший общий делитель любых двух вершин соединённых ребром больше \(1\), выведите «Yes» (без кавычек).

В противном случае выведите «No» (без кавычек).

Примечание

На картинке ниже проиллюстрировано одно из возможных деревьев для первого примера.

На картинке ниже проиллюстрировано одно из возможных деревьев для третьего примера.


Примеры
Входные данныеВыходные данные
1 6
3 6 9 18 36 108
Yes
2 2
7 17
No
3 9
4 8 10 12 15 18 33 44 81
Yes

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

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