#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;
}
