Один из самых популярных способов описания графов — это списки смежности. Такой список представляет собой массив списков, где каждый элемент массива соответствует вершине, а сам список, связанный с этой вершиной, содержит все вершины, которые с ней непосредственно связаны.
Исходя из направленного графа, показанного на рисунке, мы можем составить следующий список смежности:
Направленный граф с 8 вершинами и 10 рёбрами. Обратите внимание, что вершины 5 и 8 связаны друг с другом в обоих направлениях.
Как можете заметить, представление графа в виде списка смежности значительно компактнее по сравнению с матрицей смежности, поскольку в нашем примере не так много рёбер. Но если рёбер становится очень много, то матрица смежности может оказаться более эффективным способом хранения графа.
Задание: Рёбра в список смежности
Пусть дан неориентированный граф с v вершинами и e рёбрами. Требуется построить его список смежности.
Входные данные
В первой строке входных данных находятся два целых числа v (1 ≤ v ≤ 100 000) и e (1 ≤ e ≤ 100 000).
В следующих e строках приведены пары целых чисел v1, v2 (1 ≤ v1, v2 ≤ v), означающие, что вершина v1 соединена с вершиной v2, а вершина v2 — с v1.
Выходные данные
Программа должна вывести список смежности для заданного графа. Каждая строка должна начинаться с номера вершины, за которым следует двоеточие (:), а затем — все вершины, смежные с ней. Связанные вершины в строке отделяются друг от друга пробелами. Порядок вывода вершин и их соседей может быть произвольным.