Как построить компоненту связности,содержащую первую вершину для неориентированного графа C#

Дан неориентированный граф, возможно, с петлями и кратными ребрами. Необходимо построить компоненту связности, содержащую первую вершину.

Формат ввода следующий:

В первой строке записаны два целых числа N (1 ≤ N ≤ 103) и M (0 ≤ M ≤ 5 * 105) — количество вершин и ребер в графе. В последующих M строках перечислены ребра — пары чисел, определяющие номера вершин, которые соединяют ребра.

Формат вывода:

В первую строку выходного файла выведите число K — количество вершин в компоненте связности. Во вторую строку выведите K целых чисел — вершины компоненты связности, перечисленные в порядке возрастания номеров.

Вот мой код, подскажите пожалуйста, что не так?

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Контест_3
{
    internal class Program
    {
        public class Graph
        {
            private int V;
            private List<int>[] adj;
            public Graph(int v) //Граф через список смежности
            {
                V = v;
                adj = new List<int>[V];
                for (int i = 0; i < v; i++)
                {
                    adj[i] = new List<int>(); //Представление списка смежности через массив
                }
            }
            public void addEdge(int v, int w) //Добавление ребер
            {
                adj[v].Add(w);
            }
            void DFSUtil(int v, bool[] visited) //Поиск в глубину
            {
                visited[v] = true;  //Отметка "посещения" и вывод номера вершины
                Console.Write((v+1) + " ");
                foreach (int i in adj[v])
                {
                    int n = i;
                    if (!visited[n])
                        DFSUtil(n, visited);
                }
            }
            public void DFS() //Изначально отмечает все вершины как "непосещенные"
            {
                bool[] visited = new bool[V];
                for (int i = 0; i < V; ++i)
                    if (visited[i] == false)
                        DFSUtil(i, visited);
            }
        }

        static void Main(string[] args)
        {
            //Ввод
            string[] vvod = Console.ReadLine().Split();
            int V = Convert.ToInt32(vvod[0]);
            int E = Convert.ToInt32(vvod[1]);
            Graph g = new Graph(V);
            for (int i = 0; i < E; i++)
            {
                int[] vvod2 = Console.ReadLine().Split().Select(a => int.Parse(a)).ToArray();
                g.addEdge(vvod2[0], vvod2[1]);
                //Console.Write(vvod2[0] + " ");
                //Console.WriteLine(vvod2[1]);
            }
            g.DFS();
            Console.ReadLine();
            //Ввод
        }
    }
}

Ответы (0 шт):