QOJ.ac

QOJ

実行時間制限: 2.0 s メモリ制限: 256 MB 満点: 100 ハック可能 ✓

#17746. Наблюдение за бобрами

統計

Инфраструктура мониторинга трудолюбивых бобров (MITIT) состоит из $N$ бобров, пронумерованных от $1$ до $N$. Существует $M$ пар бобров $(u_i, v_i)$, где изначально бобр $u_i$ отвечает за мониторинг бобра $v_i$. Каждый бобр находится под мониторингом как минимум одного другого бобра.

Занятой Бобр, менеджер MITIT, хочет изменить эти отношения мониторинга. За одну операцию он может выбрать пару $(u, v)$, где бобр $u$ в данный момент следит за бобром $v$, и сделать так, чтобы бобр $v$ следил за бобром $u$. Однако он должен гарантировать, что каждый бобр всегда находится под мониторингом как минимум одного другого бобра.

Желаемая конечная конфигурация Занятого Бобра описывается строкой $d$ длины $M$, где $d_i = 0$, если бобр $u_i$ следит за бобром $v_i$ в конце, и $d_i = 1$, если бобр $v_i$ следит за бобром $u_i$ в конце. Найдите кратчайшую последовательность операций, необходимую для достижения этой конфигурации, или сообщите, что это невозможно.

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

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестовых случаев $T$ ($1 \le T \le 10^4$). Далее следует описание тестовых случаев.

Первая строка каждого тестового случая содержит два целых числа $N$ и $M$ ($3 \le N \le M \le 10^5$).

$i$-я из следующих $M$ строк содержит два целых числа $u_i$ и $v_i$ ($1 \le u_i, v_i \le N, u_i \ne v_i$). Не существует таких $1 \le i < j \le M$, что $(u_i, v_i) = (u_j, v_j)$ или $(u_i, v_i) = (v_j, u_j)$.

Следующая строка содержит строку $d_1 \dots d_M$, где $d_i \in \{0, 1\}$ для всех $1 \le i \le M$.

Гарантируется, что как в начальной, так и в конечной конфигурации каждый бобр находится под мониторингом как минимум одного другого бобра.

Гарантируется, что сумма $N$ по всем тестовым случаям не превышает $10^5$.

Гарантируется, что сумма $M$ по всем тестовым случаям не превышает $10^5$.

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

Для каждого тестового случая, если задача невыполнима, выведите единственное число $-1$.

В противном случае сначала выведите целое число $K$ — количество выполненных операций. На следующей строке выведите $K$ целых чисел $a_1, \dots, a_K$ ($1 \le a_i \le M$), означающих, что ваше решение выполняет операции над парами $(u_{a_i}, v_{a_i})$ в указанном порядке.

Подзадачи

Для получения полного балла $K$ всегда должно быть минимально возможным количеством операций. В противном случае вы получите $50\%$ баллов за каждую подзадачу, если корректно выведете любую допустимую последовательность операций, при которой сумма $K$ по всем тестовым случаям не превышает $10^6$.

  • ($50$ баллов) $M \le 300$.
  • ($50$ баллов) Дополнительных ограничений нет.

Примеры

Пример 1

3
4 5
1 2
2 3
3 1
1 4
4 3
11000
6 6
1 2
2 3
3 1
4 5
5 6
6 4
111111
3 3
1 2
2 3
3 1
000

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

2
2 1 
-1
0

Примечание

Операции в первом тестовом случае показаны ниже. Обратите внимание, что выполнение операций в обратном порядке недопустимо, так как бобр $2$ должен находиться под мониторингом в любой момент времени.

Во втором тестовом случае достичь конечной конфигурации невозможно.

В третьем тестовом случае операции выполнять не требуется.

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.