using System.Collections.Generic;
public class GameConnection
public string From { get; set; }
public string To { get; set; }
private static IEnumerable<GameConnection> Solve(IEnumerable<GameConnection> tree, string from) {
var agenda = new Queue<GameConnection>(tree.Where(item => item.From == from));
while (agenda.Count > 0) {
var current = agenda.Dequeue();
foreach (var child in tree.Where(item => item.From == current.To))
public static void Main()
List<GameConnection> list = new() {
new GameConnection() { From = "Game", To = "Player 5" },
new GameConnection() { From = "Game", To = "Player 10" },
new GameConnection() { From = "Game", To = "Player 51" },
new GameConnection() { From = "Player 51", To = "Player 14" },
new GameConnection() { From = "Player 10", To = "Player 8" },
new GameConnection() { From = "Player 8", To = "Player 4" },
new GameConnection() { From = "Player 8", To = "Player 7" },
new GameConnection() { From = "Player 8", To = "Player 1" },
new GameConnection() { From = "Player 4", To = "Player 38" },
new GameConnection() { From = "Player 38", To = "Player 35" },
new GameConnection() { From = "Player 38", To = "Player 96" },
Console.WriteLine(string.Join(Environment.NewLine, Solve(list, "Player 10")
.Select(item => $"{item.From} -> {item.To}")));