Неправильный вывод C#

Задача звучит так:

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

Во входном файле записано два числа N и M (0 < N ≤ 100000, 0 ≤ M ≤ 100000). В следующих M строках записаны по два числа i и j (1 ≤ i, j ≤ N), которые означают, что вершины i и j соединены ребром.

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

введите сюда описание изображения

Код:

using System;
using System.Collections.Generic;

class Program
{
   private static int walk(List<List<int>> mm, List<int> seen, List<int> vert, int r, int 
color)
   {
       if (seen[r] != 0)
       {
         return 0;
       }
       seen[r] = color;
       vert.Add(r);
       int cnt = 1;
       foreach (int i in mm[r])
         {
           cnt += walk(mm, seen, vert, i, color);
         }
         return cnt;
    }

    private static void Main(string[] args)
    {
     int n = 0;
     int m = 0;
     string[] temp = Console.ReadLine().Split(' ');
     string tempVar = temp[0];
     if (tempVar != null)
     {
        n = int.Parse(tempVar);
     }
     string tempVar2 = temp[1];
     if (tempVar2 != null)
     {
        m = int.Parse(tempVar2);
     }
     List<int> color = new List<int>(n);
     List<List<int>> mm = new List<List<int>>(n);
     for (int i = 0; i < n; i++)
     {
        color.Add(0);
        mm.Add(new List<int>());
     }
     while (m-- > 0)
     {
        int i = 0;
        int j = 0;
        temp = Console.ReadLine().Split(' ');
        string tempVar3 = temp[0];
        if (tempVar3 != null)
        {
            i = int.Parse(tempVar3);
        }
        string tempVar4 = temp[1];
        if (tempVar4 != null)
        {
            j = int.Parse(tempVar4);
        }
        i--;
        j--;
        mm[i].Add(j);
        mm[j].Add(i);
    }
    int c = 0;
    List<int> ncolor = new List<int>(n);
    for (int i = 0; i < n; i++)
    {
        ncolor.Add(0);
    }
    List<List<int>> colvert = new List<List<int>>();
    for (int i = 0; i < n; i++)
    {
        if (color[i] == 0)
        {
            colvert.Add(new List<int>());
            ncolor[c] = walk(mm, color, colvert[colvert.Count - 1], i, c + 1);
            c++;
        }
    }
    Console.Write("{0:D}\n", c);
    for (int i = 0; i < c; i++)
    {
        Console.Write("{0:D}\n", ncolor[i]);
        foreach (var v in colvert[i])
        {
            Console.Write("{0:D} ", v + 1);
        }
        Console.Write("\n");
      }
      Console.ReadKey();
  }
}

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