public string Solve() { var graph = GetDirectedGraphFromSccInput(); var componentsSizes = new List <int>(); var searcher = new GraphSearch(InputMaxNodeNumber); var connectedComponents = searcher.KasarajuFindSccs(graph); foreach (var component in connectedComponents) { componentsSizes.Add(component.Count); } componentsSizes.Sort(); componentsSizes.Reverse(); var topFiveComponents = componentsSizes.Take(5).ToArray(); return(string.Join(", ", topFiveComponents)); }