using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
int[] arr = {1, 2, 3, 4, 5};
bool[] b = new bool[arr.Length];
List<List<int>> result = new List<List<int>>();
subset(arr, k, 0, 0, b, result);
List<int> cur = new List<int>();
result = new List<List<int>>();
subset2(arr, k, 0, cur, result);
result = powerSet(arr, 0);
private static void PrintLists(List<List<int>> result){
Console.WriteLine("-------result--------");
foreach(List<int> combo in result){
public static List<List<int>> powerSet(int[] arr, int index){
sets = new List<List<int>>();
sets.Add(new List<int>());
List<List<int>> existingSets = powerSet(arr, index + 1);
sets = new List<List<int>>();
sets.AddRange(existingSets);
foreach(List<int> existingSet in existingSets){
List<int> newSet = new List<int>();
newSet.AddRange(existingSet);
public static void subset(int[] arr, int k, int start, int length, bool[] used, List<List<int>> result){
List<int> combo = new List<int>();
for(int i = 0; i< arr.Length;i++){
subset(arr, k, start+1, length + 1, used, result);
subset(arr, k, start + 1, length, used, result);
public static void subset2(int[] arr, int k, int index, List<int> curr, List<List<int>> result){
List<int> added = new List<int>();
subset2(arr, k, index+1, added, result);
subset2(arr, k, index + 1, curr, result);