#include<iostream>
#include<list>
#include <iterator>
void print( std::list<int> l){
std::copy( l.begin(), l.end(), std::ostream_iterator<int>( std::cout, " "));
std::cout << std::endl;
}
void subset( int arr[], int size, int left, int index, std::list<int> &l){
if( left == 0){
print(l);
return;
}
for( int i = index; i < size; i++){
l.push_back( arr[i]);
subset( arr, size, left - 1, i + 1, l);
l.pop_back();
}
}
int main() {
int array[5] = { 1, 2, 3, 4, 5} ;
std::list<int> lt;
subset( array, 5, 1, 0, lt);
subset( array, 5, 2, 0, lt);
subset( array, 5, 3, 0, lt);
subset( array, 5, 4, 0, lt);
subset( array, 5, 5, 0, lt);
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGxpc3Q+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCnZvaWQgcHJpbnQoIHN0ZDo6bGlzdDxpbnQ+IGwpewogICAgc3RkOjpjb3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KCBzdGQ6OmNvdXQsICIgIikpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCBzdWJzZXQoIGludCBhcnJbXSwgaW50IHNpemUsIGludCBsZWZ0LCBpbnQgaW5kZXgsIHN0ZDo6bGlzdDxpbnQ+ICZsKXsKICAgIGlmKCBsZWZ0ID09IDApewogICAgICAgIAogICAgICAgIHByaW50KGwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgZm9yKCBpbnQgaSA9IGluZGV4OyBpIDwgc2l6ZTsgaSsrKXsKICAgICAgICBsLnB1c2hfYmFjayggYXJyW2ldKTsKICAgICAgICBzdWJzZXQoIGFyciwgc2l6ZSwgbGVmdCAtIDEsIGkgKyAxLCBsKTsKICAgICAgICBsLnBvcF9iYWNrKCk7CiAgICB9Cgp9ICAgICAKCmludCBtYWluKCkgewogICAgCiAgICBpbnQgYXJyYXlbNV0gPSB7IDEsIDIsIDMsIDQsIDV9IDsKICAgIHN0ZDo6bGlzdDxpbnQ+IGx0OyAgIAogICAgc3Vic2V0KCBhcnJheSwgNSwgMSwgMCwgbHQpOwogICAgc3Vic2V0KCBhcnJheSwgNSwgMiwgMCwgbHQpOwogICAgc3Vic2V0KCBhcnJheSwgNSwgMywgMCwgbHQpOwogICAgc3Vic2V0KCBhcnJheSwgNSwgNCwgMCwgbHQpOwogICAgc3Vic2V0KCBhcnJheSwgNSwgNSwgMCwgbHQpOwoKICAgIHJldHVybiAwOwp9