#include <stdio.h>
#include <conio.h>
int arr[20], x[20], n, target;
void sumOfSubsets(int s, int k, int r) {
int i;
x[k] = 1;
if (s + arr[k] == target) {
printf("{ ");
for (i = 0; i <= k; i++)
if (x[i] == 1)
printf("%d ", arr[i]);
printf("}\n");
}
else if (s + arr[k] + arr[k+1] <= target)
sumOfSubsets(s + arr[k], k + 1, r - arr[k]);
if ( (s + r - arr[k] >= target) && (s + arr[k+1] <= target) ) {
x[k] = 0;
sumOfSubsets(s, k + 1, r - arr[k]);
}
}
void main() {
int i, r = 0;
clrscr();
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter the elements (sorted): ");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
r += arr[i];
}
printf("Enter target sum: ");
scanf("%d", &target);
printf("\nSubsets with sum = %d:\n", target);
sumOfSubsets(0, 0, r);
getch();
}