#include <iostream>
#include <bits/stdc++.h>
using namespace std;
/*
set = {1,2,3}
print all the subsets of this set
E.g.
1
2
3
1 2
1 3
...
tem curr set
*/
void DFS(int sou , int n , vector<int>& curr , vector<int>& a){
if(sou >= n)return;
cout<< "call with: " <<sou << "\n";
curr.push_back(a[sou]);
for(int i = sou + 1 ; i < n ; i++){
DFS(i , n , curr , a);
}
for(int i : curr){
cout << i << " ";
}
cout << "\n";
curr.pop_back();
}
// To execute C++, please define "int main()"
int main() {
vector<int> curr; // O(n)
vector<int> a = {1 ,2 , 3};
int n = a.size();
//for(int i = 0 ; i < n ; i++)
{
//n*(n-1)*..1 ;// O(2^n);
DFS(2 , n , curr , a);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qCnNldCA9IHsxLDIsM30gCnByaW50IGFsbCB0aGUgc3Vic2V0cyBvZiB0aGlzIHNldApFLmcuIAoxCjIgCjMKMSAyCjEgMwouLi4KdGVtIGN1cnIgc2V0CgoqLwoKCnZvaWQgREZTKGludCBzb3UgLCBpbnQgbiAsIHZlY3RvcjxpbnQ+JiBjdXJyICwgdmVjdG9yPGludD4mIGEpewogIGlmKHNvdSA+PSBuKXJldHVybjsKICBjb3V0PDwgImNhbGwgd2l0aDogIiA8PHNvdSA8PCAiXG4iOwogIGN1cnIucHVzaF9iYWNrKGFbc291XSk7CiAgZm9yKGludCBpID0gc291ICsgMSA7IGkgPCBuIDsgaSsrKXsKICAgIERGUyhpICwgbiAsIGN1cnIgLCBhKTsKICB9CiAgZm9yKGludCBpIDogY3Vycil7CiAgICBjb3V0IDw8IGkgPDwgIiAiOwogIH0KICBjb3V0IDw8ICJcbiI7CiAgY3Vyci5wb3BfYmFjaygpOwp9Ci8vIFRvIGV4ZWN1dGUgQysrLCBwbGVhc2UgZGVmaW5lICJpbnQgbWFpbigpIgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IGN1cnI7IC8vIE8obikKICAgIHZlY3RvcjxpbnQ+IGEgPSB7MSAsMiAsIDN9OwogICAgaW50IG4gPSBhLnNpemUoKTsKICAgIC8vZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKQogICAgewogICAgICAvL24qKG4tMSkqLi4xIDsvLyBPKDJebik7CiAgICAgIERGUygyICwgbiAgLCBjdXJyICwgYSk7CiAgICB9CiAgICAKICByZXR1cm4gMDsKfQo=