using System;
using System.Collections.Generic;
public class Program
{
static void GetCombinationsEqualToN(List<int> arr, int N, List<int> combination) {
int sum = 0;
foreach (int num in combination) {
sum += num;
}
if (sum == N) {
Console.WriteLine("sum(" + string.Join(",", combination.ToArray()) + ") = " + N);
}
if (sum >= N) {
return;
}
for (int i = 0; i < arr.Count; i++) {
List<int> remaining = new List<int>();
for (int j = i + 1; j < arr.Count; j++) {
remaining.Add(arr[j]);
}
List<int> combination_next = new List<int>(combination);
combination_next.Add(arr[i]);
GetCombinationsEqualToN(remaining, N, combination_next);
}
}
public static void Main(string[] args)
{
List<int> list = new List<int>() {4, 6, 8, 2, 1, 10, 3, 5, 13};
int N = 13;
GetCombinationsEqualToN(list, N, new List<int>());
}
}
/*
run:
sum(4,6,2,1) = 13
sum(4,6,3) = 13
sum(4,8,1) = 13
sum(4,1,3,5) = 13
sum(6,2,5) = 13
sum(8,2,3) = 13
sum(8,5) = 13
sum(2,1,10) = 13
sum(10,3) = 13
sum(13) = 13
*/