Рассмотрим разновидность двоичного дерева, которую мы назовем логическим деревом.
В этом дереве каждый уровень полностью заполнен, за исключением, возможно,
последнего (самого глубокого) уровня. При этом все вершины последнего уровня
находятся максимально слева. Дополнительно, каждая вершина дерева имеет ноль или
двоих детей.
Каждая вершина дерева имеет связанное с ней логическое значение (1 или 0).
Кроме этого, каждая внутренняя вершина имеет связанную с ней логическую операцию
(„И“ или „ИЛИ“). Значение вершины с операцией „И“ — это логическое „И“ значений
её детей. Аналогично, значение вершины с операцией „ИЛИ“ — это логическое „ИЛИ“ значений
её детей. Значения всех листьев задаются во входном файле, поэтому значения всех
вершин дерева могут быть найдены.
Наибольший интерес для нас представляет корень дерева. Мы хотим, чтобы он имел заданное
логическое значение \(v\), которое может отличаться от текущего. К счастью,
мы можем изменять логические операции некоторых внутренних вершин (заменить „И“ на „ИЛИ“ и наоборот).
Дано описание логического дерева и набор вершин, операции в которых могут быть
изменены. Найдите наименьшее количество вершин, которые следует изменить,
чтобы корень дерева принял заданное значение \(v\). Если это невозможно, то
выведите строку «IMPOSSIBLE» (без кавычек).