using System.Collections.Generic;
public class DistributionGroup
public string Id { get; set; }
public List<string> Users { get; set; }
public List<string> DistributionGroups { get; set; }
public static void Main()
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(GetFlattenedListOfUserIds("d69c80c8-bc48-11ec-a3df-00155d5b564d")));
public static List<string> GetFlattenedListOfUserIds(string rootDistributionGroupId)
var users = new HashSet<string>();
var visitedDistributionGroups = new HashSet<string>();
var distributionGroupsToVisit = new Queue<string>();
distributionGroupsToVisit.Enqueue(rootDistributionGroupId);
while (distributionGroupsToVisit.Any())
var distributionGroupId = distributionGroupsToVisit.Dequeue();
if (!visitedDistributionGroups.Contains(distributionGroupId))
var distributionGroup = GetByDistributionGroupId(distributionGroupId);
if (distributionGroup != null)
users.UnionWith(distributionGroup.Users);
distributionGroup.DistributionGroups.ForEach(d => distributionGroupsToVisit.Enqueue(d));
visitedDistributionGroups.Add(distributionGroupId);
public static DistributionGroup GetByDistributionGroupId(string distributionGroupId)
Dictionary<string, DistributionGroup> distributionGroup = new()
{ "d69c80c8-bc48-11ec-a3df-00155d5b564d", new() { Id = "d69c80c8-bc48-11ec-a3df-00155d5b564d", Users = new() { "a5dca2a4-bc4a-11ec-b3af-00155d5b564d", "ab2f6ca0-bc4a-11ec-8363-00155d5b564d" }, DistributionGroups = new() { "a5dca2a4-bc4a-11ec-b3af-00155d5b564d", "ab2f6ca0-bc4a-11ec-8363-00155d5b564d" } } },
{ "a5dca2a4-bc4a-11ec-b3af-00155d5b564d", new() { Id = "a5dca2a4-bc4a-11ec-b3af-00155d5b564d", Users = new() { "a5dca2a4-bc4a-11ec-b3af-00155d5b564d", "5626e1c4-bc4b-11ec-9449-00155d5b564d" }, DistributionGroups = new() { "d69c80c8-bc48-11ec-a3df-00155d5b564d" } } },
{ "ab2f6ca0-bc4a-11ec-8363-00155d5b564d", new() { Id = "ab2f6ca0-bc4a-11ec-8363-00155d5b564dd", Users = new() { }, DistributionGroups = new() { "659ab6da-bc4b-11ec-a6c0-00155d5b564d" } } },
{ "659ab6da-bc4b-11ec-a6c0-00155d5b564d", new() { Id = "ab2f6ca0-bc4a-11ec-8363-00155d5b564dd", Users = new() { "86c027b4-bc4b-11ec-98f1-00155d5b564d" }, DistributionGroups = new() { } } },
return distributionGroup[distributionGroupId];