void foo(list& set, list subset, int n, int remain) { if (remain == 0) display(subset); if (n >= set.size()) return; foo(set, subset, n+1, remain); subset.push_back(set[n]); foo(set, subset, n+1, remain-1); }