Есть такая задачка помогите решить
Считая города графства вершинами графа, а дороги - его рёбрами, найдите фундаментальное множество циклов графства.
Формат входных данных
В первой строке дано число N - количество городов в графстве
В последующих N строках описано с какими городами связан дорогами каждый из N городов графства. Каждая такая строка имеет вид:
Gi CNTi N1 N2 ... NCNTi где
Gi - город, для которого даны имена городов, связанных с ним дорогами
CNTi - количество таких [соседних] городов
N1, N2, .. - их имена
Формат выходных данных
В выходной файле должно быть столько строк, сколько сколько циклов в фундаментальном множестве.
В каждой строке должны быть через перечислены города циклы из фундаментального множества: должны быть выведены через пробел города соответствующего цикла при обходе. Строка должна начинаться и заканчиваться одним и тем же городом.
Ели вариантов ответа несколько, вывести любой из них.
Пример
Вход (stdin) Выход (stdout)
5
tomsk 3 perm omsk saratov
omsk 3 perm tomsk saratov
perm 2 tomsk omsk
saratov 3 tomsk omsk moskva
moskva 1 saratov perm omsk tomsk perm
tomsk saratov omsk perm tomsk
Ограничения
1. Имя города составлено из строчных латинских букв, его длина не превосходит 8 символов.
2. Количество городов в графстве не превосходит 105.
3. Общее число дорог графства не превосходит 1.1*105.
4. Гарантируется, что в графстве отсутствуют дороги из одного города в него же и, если два города связаны дорогой, то только одной.
Примечания
1. Для сопоставления имен городов и номеров вершин графа рекомендуется использовать одну из следующих структур данных: бинарное дерево поиска, сбалансированное дерево поиска, хэш-таблица
2. Для сортировки результата рекомендуется использовать любой алгоритм быстрой сортировки (пр. Шелла, Хоара, слиянием, ...)
3. На следующем рисунке проиллюстрирован граф из примера:
Реализовать можно на C++ или Delphi