var input = new int[] { 3, 4, 1, 5, 2, 7, 4, 2, 6 };
var numberOfSubsets = (int)Math.Pow(2, input.Length);
var subsets = new int[numberOfSubsets][];
subsets[nextEmptyIndex++] = new int[0];
foreach (int element in input)
int stopIndex = nextEmptyIndex - 1;
for (int i = 0; i <= stopIndex; i++)
int newSubsetLength = subsets[i].Length + 1;
int newSubsetIndex = nextEmptyIndex++;
subsets[newSubsetIndex] = new int[newSubsetLength];
Array.Copy(subsets[i], subsets[newSubsetIndex], subsets[i].Length);
subsets[newSubsetIndex][newSubsetLength - 1] = element;
for (int i = 0; i < subsets.Length; i++)
Console.WriteLine($"subsets[{ i }] = { string.Join(", ", subsets[i]) }");