#include <bits/stdc++.h>
using namespace std;
void f(vector<int>&v,vector<int>&ds,int idx, int sum, int k, int& cnt){
if(idx>=v.size() || sum==k){
if(sum==k)
{cnt++;
for(int i=0;i<ds.size();i++)
cout<<ds[i]<<" ";
cout<<endl;
return;}
return;
}
sum=sum+v[idx]; ds.push_back(v[idx]);
f(v,ds,idx+1,sum,k,cnt);
sum=sum-v[idx]; ds.pop_back();
f(v,ds,idx+1,sum,k,cnt);
}
int main() {
vector<int>v= {3,1,2,1};
vector<int>ds; int sum=0; int idx=0; int k=4; int cnt=0;
f(v,ds,idx,sum,k,cnt);
cout<<" count is "<<cnt<<endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgZih2ZWN0b3I8aW50PiZ2LHZlY3RvcjxpbnQ+JmRzLGludCBpZHgsIGludCBzdW0sIGludCBrLCBpbnQmIGNudCl7CglpZihpZHg+PXYuc2l6ZSgpIHx8IHN1bT09ayl7CgkJaWYoc3VtPT1rKQoJCXtjbnQrKzsKCQlmb3IoaW50IGk9MDtpPGRzLnNpemUoKTtpKyspCgkJY291dDw8ZHNbaV08PCIgIjsKCQljb3V0PDxlbmRsOwoJCXJldHVybjt9CgkJcmV0dXJuOwoJfQoJc3VtPXN1bSt2W2lkeF07IGRzLnB1c2hfYmFjayh2W2lkeF0pOwoJZih2LGRzLGlkeCsxLHN1bSxrLGNudCk7CglzdW09c3VtLXZbaWR4XTsgZHMucG9wX2JhY2soKTsKCWYodixkcyxpZHgrMSxzdW0sayxjbnQpOwp9CmludCBtYWluKCkgewoJdmVjdG9yPGludD52PSB7MywxLDIsMX07Cgl2ZWN0b3I8aW50PmRzOyBpbnQgc3VtPTA7IGludCBpZHg9MDsgaW50IGs9NDsgaW50IGNudD0wOwoJZih2LGRzLGlkeCxzdW0sayxjbnQpOwoJY291dDw8IiBjb3VudCBpcyAiPDxjbnQ8PGVuZGw7Cn0=