using System.Collections.Generic;
public static void Main()
List<int> motherlist = new List<int> { 1, 1, 2, 5, 7, 2, 2, 2, 6, 1 };
List<List<int>> children = motherlist.DistributeDuplicates();
Console.WriteLine(string.Join(Environment.NewLine, children.Select(c => string.Join(",", c))));
public static class EnumerableExtensions
public static List<List<T>> DistributeDuplicates<T>(this IEnumerable<T> seq, IEqualityComparer<T> comparer = null)
if(comparer == null) comparer = EqualityComparer<T>.Default;
Dictionary<T, int> dupCounter = new Dictionary<T, int>(comparer);
bool isDup = dupCounter.TryGetValue(item, out int count);
dupCounter[item] = isDup ? count + 1 : 1;
int maxDupCount = dupCounter.Values.Max();
var resultList = new List<System.Collections.Generic.List<T>>(maxDupCount);
for(int i = 0; i < maxDupCount; i++)
List<T> subList = dupCounter.Where(kv => kv.Value > i).Select(kv => kv.Key).ToList();