Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вывести корректную последовательность операций, если она существует. Вы можете делать взломы только в том случае, если решили все версии этой задачи.
У Кевина есть неориентированный граф с $$$n$$$ вершинами и $$$m$$$ рёбрами. Изначально некоторые вершины содержат камни, которые Кевин хочет переместить на новые позиции.
Кевин может выполнять следующую операцию:
В любой момент каждая вершина может содержать не более одного камня.
Определите, существует ли корректная последовательность операций, которая перемещает камни из начального состояния в целевое. Выведите корректную последовательность операций, содержащую не более $$$2n$$$ операций, если она существует. Можно доказать, что если существует корректная последовательность, то существует и корректная последовательность, содержащая не более $$$2n$$$ операций.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 1000$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит два целых числа $$$n$$$ и $$$m$$$ ($$$1\leq n \leq 2000$$$, $$$0\leq m \leq \min(\frac{n(n-1)}{2}, 10^4)$$$) — количество вершин и рёбер в графе.
Вторая строка содержит бинарную строку $$$s$$$, состоящую из '0' и '1'. $$$i$$$-й символ $$$s$$$ обозначает количество камней в $$$i$$$-й вершине в исходном состоянии.
Третья строка содержит бинарную строку $$$t$$$, состоящую из '0' и '1'. $$$i$$$-й символ $$$t$$$ обозначает количество камней в $$$i$$$-й вершине в целевом состоянии.
Каждая из следующих $$$m$$$ строк содержит два целых числа $$$u$$$ и $$$v$$$ ($$$1\leq u, v \leq n$$$) — существует неориентированное ребро между вершинами $$$u$$$ и $$$v$$$.
Гарантируется, что граф прост, то есть в графе нет петель и кратных рёбер.
Гарантируется, что количество '1' в $$$s$$$ и $$$t$$$ совпадает.
Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$2000$$$.
Гарантируется, что сумма значений $$$m$$$ по всем наборам входных данных не превосходит $$$10^4$$$.
Для каждого набора входных данных на отдельной строке выведите «Yes» или «No» — существует ли допустимая последовательность операций.
Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.
Если существует корректная последовательность операций, во второй строке выведите единственное целое число $$$k$$$ ($$$0 \leq k \leq 2n$$$), обозначающее количество операций. Предположим, что в исходном состоянии имеется $$$c$$$ камней. Каждая из следующих $$$k + 1$$$ строк должна содержать $$$c$$$ различных целых чисел, представляющих положение камней до операций и после каждой операции. Эти позиции должны удовлетворять следующим требованиям:
Если существует несколько решений, выведите любое из них.
42 110011 211 1111011001010011010111001 22 33 44 55 66 77 88 99 1010 1111 13 21101011 22 33 21111111 22 3
Yes 1 1 2 Yes 6 1 2 4 5 8 10 2 3 5 6 9 11 3 2 6 7 10 1 4 3 7 8 11 2 5 2 8 9 1 3 6 3 7 8 2 4 7 2 8 9 3 5 No Yes 0 1 2 3
Название |
---|