0012. Маршруты

Имя входного файла: routes.in
Имя выходного файла: routes.out
Ограничение по времени: 2 s
Ограничение по памяти: 64 megabytes

Город Затропеводск признан большим историческим и культурным центром. В городе N перекрестков и M улиц. Каждая улица соединяет два перекрестка, вне перекрестков улицы не пересекаются. По улице можно двигаться в обоих направлениях.

В целях развития туризма местная администрация решила составить несколько пешеходных туристических маршрутов, проходящих по улицам города. Администрация требует, чтобы каждая улица города присутствовала в одном и только одном маршруте (неважно в каком направлении). Маршрут обязательно должен начинаться и заканчиваться на одном и том же перекрестке. Для экономии бюджетных средств число маршрутов требуется сделать минимально возможным.

Формат входного файла

В первой строке входного файла заданы два числа N и M √ количество перекрестков и улиц в Затропеводске (1 ≤ N ≤ 100000, 1 ≤ M ≤ 100000). Далее содержится M строк по два числа в каждой √ номера перекрестков, соединяемых улицей. Гарантируется, что никакая улица не соединяет перекресток с самим собой.

Формат выходного файла

В первой строке выходного файла выведите K - искомое минимально возможное количество маршрутов, которое необходимо создать. Далее выведите K строк, описывающих маршруты. Каждое описание маршрута состоит из количества улиц в маршруте и последовательности номеров улиц в порядке их прохождения. Улицы нумеруются в том порядке, в котором они заданы во входном файле, начиная с единицы. Если искомую последовательность построить нельзя, в выходной файл выведите единственное число -1.

Пример:

routes.inroutes.out
3 3 1 2 2 3 3 1 1 3 1 2 3
3 6 1 2 2 3 3 1 1 2 2 3 3 1 1 6 1 2 6 4 5 3
3 2 1 2 2 3 -1


Источник: Командное школьное первенство Республики Карелия по программированию, май 2008.

Обсудить       Отправить решение