using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
var subsets = GetSubsets(new List<int> { 1, 2, 3 });
foreach (var subset in subsets)
{
foreach (var item in subset)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
}
private static List<List<int>> GetSubsets(List<int> set)
{
List<List<int>> subset = new List<List<int>>();
subset.Add(new List<int>());
for (int i = 0; i < set.Count; i++)
{
List<List<int>> subsetTemp = DeepCopyListOfList(subset);
for (int j = 0; j < subsetTemp.Count; j++)
{
subsetTemp[j].Add(set[i]);
}
var subsetTempCount = subsetTemp.Count;
for (int j = 0; j < subsetTempCount; j++)
{
subset.Add(new List<int>(subsetTemp[j]));
}
}
return subset;
}
private static List<List<int>> DeepCopyListOfList(List<List<int>> subset)
{
var ret = new List<List<int>>();
foreach (var list in subset)
{
ret.Add(new List<int>(list));
}
return ret;
}
}