#include <bits/stdc++.h>
using namespace std;
void print(vector<int> d)
{
for(int i=0;i<d.size();i++)
cout<<d[i]<<" ";
cout<<"\n";
}
void perm(vector<int> w,vector<int>& d,vector<int>& v,int l)
{
if(l==w.size())
{
print(d);
return;
}
for(int i=0;i<w.size();i++)
{
if(v[i]==0)
{
d.push_back(w[i]);
v[i]=1;
perm(w,d,v,l+1);
v[i]=0;
d.pop_back();
}
}
}
void subset(int a[],int n,int r,vector<int>& s,int pos,int size,vector<int>& d,vector<int>& v)
{
if(size==r)
{
for(int i=0;i<r;i++)
v.push_back(0);
int l=0;
perm(s,d,v,l);
d.clear();
v.clear();
return;
}
for(int i=pos;i<n;i++)
{
s.push_back(a[i]);
subset(a,n,r,s,i+1,size+1,d,v);
s.pop_back();
}
}
int main()
{
int a[]={1,2,3,4};
int r=3,n=sizeof(a)/sizeof(a[0]);
vector<int> s,d,v;
for(int i=1;i<=n;i++)
subset(a,n,i,s,0,0,d,v);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHByaW50KHZlY3RvcjxpbnQ+IGQpCnsKCWZvcihpbnQgaT0wO2k8ZC5zaXplKCk7aSsrKQoJCWNvdXQ8PGRbaV08PCIgIjsKCWNvdXQ8PCJcbiI7Cn0KCnZvaWQgcGVybSh2ZWN0b3I8aW50PiB3LHZlY3RvcjxpbnQ+JiBkLHZlY3RvcjxpbnQ+JiB2LGludCBsKQp7CglpZihsPT13LnNpemUoKSkKCXsKICAgICAgICBwcmludChkKTsKICAgICAgICByZXR1cm47Cgl9CgoJZm9yKGludCBpPTA7aTx3LnNpemUoKTtpKyspCgl7CgkJaWYodltpXT09MCkKCQl7CgkJCWQucHVzaF9iYWNrKHdbaV0pOwoJCQl2W2ldPTE7CgkJCXBlcm0odyxkLHYsbCsxKTsKCQkJdltpXT0wOwoJCQlkLnBvcF9iYWNrKCk7CgkJfQoJfQp9Cgp2b2lkIHN1YnNldChpbnQgYVtdLGludCBuLGludCByLHZlY3RvcjxpbnQ+JiBzLGludCBwb3MsaW50IHNpemUsdmVjdG9yPGludD4mIGQsdmVjdG9yPGludD4mIHYpCnsKCWlmKHNpemU9PXIpCgl7CgkJCgkJZm9yKGludCBpPTA7aTxyO2krKykKCQkJdi5wdXNoX2JhY2soMCk7CiAgICAgICAgaW50IGw9MDsKCQlwZXJtKHMsZCx2LGwpOwoJCWQuY2xlYXIoKTsKCQl2LmNsZWFyKCk7CgkJcmV0dXJuOwoJfQoJZm9yKGludCBpPXBvcztpPG47aSsrKQoJewogICAgICAgcy5wdXNoX2JhY2soYVtpXSk7CiAgICAgICBzdWJzZXQoYSxuLHIscyxpKzEsc2l6ZSsxLGQsdik7CiAgICAgICBzLnBvcF9iYWNrKCk7Cgl9Cn0KCmludCBtYWluKCkKewoJaW50IGFbXT17MSwyLDMsNH07CglpbnQgcj0zLG49c2l6ZW9mKGEpL3NpemVvZihhWzBdKTsKCXZlY3RvcjxpbnQ+IHMsZCx2OwoJZm9yKGludCBpPTE7aTw9bjtpKyspCglzdWJzZXQoYSxuLGkscywwLDAsZCx2KTsKCXJldHVybiAwOwp9