#include <iostream>
#include <cstring>
#include <cstdio>
#define MAX 100
using namespace std;
int element[MAX];
//二进制法枚举子集
void print_subset(int n,int s)
{
for(int i = 0;i < n;i++)
if(s & (1<<i)) cout<<i<<' ';
cout<<endl;
}
int main()
{
int n;//集合中元素个数
while(cin>>n){
for(int i = 0;i < n;i++)
cin>>element[i];
int a[MAX];
for(int i = 0;i < (1<<n);i++)
print_subset(n,i);//输出子集
}
return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
#define MAX 100
using namespace std;
int element[MAX];
void print_subset(int n,int *b,int cur)
{
if(cur == n){
for(int i = 0;i < cur;i++)
if(b[i]) cout<<i<<" ";
cout<<endl;
return;
}
b[cur] = 1;
print_subset(n,b,cur+1);
b[cur] = 0;
print_subset(n,b,cur+1);
}
int main()
{
int n;//集合中元素个数
while(cin>>n){
for(int i = 0;i < n;i++)
cin>>element[i];
int b[MAX];
print_subset(n,b,0);//输出子集
}
return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
#define MAX 100
using namespace std;
int element[MAX];
void print_subset(int n,int *A,int cur)
{
for(int i = 0;i < cur;i++) cout<<element[A[i]]<<" ";
cout<<endl;
int s = cur ? A[cur-1]+1 : 0;
for(int i = s; i < n; i++){
A[cur] = i;
print_subset(n,A,cur+1);
}
}
int main()
{
int n;//集合中元素个数
while(cin>>n){
for(int i = 0;i < n;i++)
cin>>element[i];
int a[MAX];
for(int i = 0;i <= n;i++)
a[i] = i;
print_subset(n,a,0);//输出子集
}
return 0;
}