QOJ.ac

QOJ

时间限制: 2 s 内存限制: 1024 MB 总分: 10

#8406. Алхимик Байтазар [B]

统计

Бальтазар — известный алхимик, который на время отложил попытки создания философского камня, чтобы заняться трансмутацией материалов. Точнее, Бальтазар хотел бы превратить одну молекулу в другую. Молекула, которой владеет Бальтазар, состоит из $n$ атомов байтония*, пронумерованных от $1$ до $n$. Между некоторыми парами атомов могут существовать связи, при этом между любой парой атомов может быть не более одной связи. Молекула Бальтазара представляет собой связное целое — из каждого атома можно добраться до любого другого, пройдя по одной или нескольким связям.

Бальтазар имеет описание связей для $n$-атомной молекулы, которую он хотел бы получить — для каждой пары атомов он знает, должны ли они быть в итоге соединены связью или нет. Целевая молекула удовлетворяет тем же условиям — она представляет собой связное целое, и каждая пара атомов соединена не более чем одной связью. К сожалению, молекула Бальтазара может отличаться от целевой. Чтобы это исправить, он может воспользоваться своими алхимическими способностями. В любой момент он может выполнить одну из двух возможных операций:

  • Бальтазар может выбрать два различных атома $a$ и $b$, не соединенных связью, и создать между ними связь. Из-за высокой нестабильности байтония он может сделать это только в том случае, если существует атом $c$ (отличный от $a$ и $b$), который в данный момент соединен связями как с $a$, так и с $b$.
  • Бальтазар может выбрать два различных атома $a$ и $b$, соединенных связью, и удалить эту связь. По тем же причинам он может сделать это только в том случае, если существует атом $c$ (отличный от $a$ и $b$), который в данный момент соединен связями как с $a$, так и с $b$.

Бальтазар не хочет тратить слишком много времени на превращение. Напишите программу, которая поможет ему превратить его молекулу в целевую, сделав это не более чем за $200\,000$ ходов.

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

В первой строке входных данных находится одно целое число $n$ ($2 \le n \le 30\,000$), обозначающее количество атомов в молекуле, которой владеет Бальтазар, а также в целевой молекуле.

Во второй строке входных данных находится одно целое число $m_s$ ($n-1 \le m_s \le 50\,000$), обозначающее количество связей в молекуле, которой владеет Бальтазар.

В следующих $m_s$ строках входных данных содержатся по два целых числа. Числа в $i$-й из этих строк, $a_i$ и $b_i$ ($1 \le a_i, b_i \le n; a_i \neq b_i$), обозначают номера атомов, соединенных связью. Гарантируется, что молекула Бальтазара является связной и любые два атома соединены не более чем одной связью.

В следующей строке входных данных находится одно целое число $m_d$ ($n-1 \le m_d \le 50\,000$), обозначающее количество связей в целевой молекуле.

В следующих $m_d$ строках содержится описание этих связей в формате, идентичном формату для начальной молекулы.

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

В первой строке вывода должно находиться число ходов $r$, которые вы хотите выполнить. Должно выполняться условие $0 \le r \le 200\,000$.

В каждой из следующих $r$ строк должны находиться описания последовательных ходов. Если в $i$-м ходе вы хотите соединить связью атомы $x_i$ и $y_i$, то $i$-я строка должна начинаться со знака «+», а после одиночного пробела должны следовать числа $x_i$ и $y_i$, также разделенные одиночным пробелом. Если вместо этого вы хотите удалить связь, соединяющую атомы $x_i$ и $y_i$, то строка должна начинаться со знака «-», а затем, аналогично, содержать числа $x_i$ и $y_i$.

Выведенная вами последовательность ходов должна удовлетворять условиям, указанным в задаче — в момент выбора атомов $x_i$ и $y_i$ должен существовать другой атом, соединенный с ними обоими. После выполнения последовательности ходов финальная молекула должна быть идентична целевой: для каждой пары атомов $i, j$ ($1 \le i < j \le n$) атомы с номерами $i$ и $j$ должны быть соединены связью в финальной молекуле в точности тогда, когда эти атомы соединены связью в целевой молекуле.

Обратите внимание, что вам не нужно минимизировать количество ходов — достаточно выполнить их не более $200\,000$. Можно доказать, что превращение всегда можно осуществить, выполнив не более $200\,000$ ходов.

Примеры

Пример 1

4
3
1 2
3 4
3 2
4
1 4
1 2
2 3
3 4
3
+ 1 3
+ 1 4
- 3 1

Примечание

Пояснение к примеру: Заметьте, что Бальтазар не мог сразу соединить связью первый атом с четвертым, так как в тот момент не существовало ни одного атома, соединенного с ними обоими. Создав временную связь между первым и третьим атомами, он сделал третьим атомом тот самый атом, который был нужен.

* В Байтоции байтоний является одним из самых популярных химических элементов, используемым, среди прочего, для производства продуктов питания и контактных линз.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.