#include<iostream>
using namespace std;
int visited[101];
//arry表示求子集的数组
//cur表示搜索当前位置
//n表示数组元素个数
void DFS(int *arry, int cur, int n)//字典序
{
for(int i=0; i<cur; i++)
if(visited[i])
cout<<arry[i]<<" ";
if( cur != 0)
cout<<endl;
if( cur>=n )
return;
for(int i=cur; i<n; i++)
{
if( !visited[i] )
{
visited[i]=1;
DFS(arry, i+1, n);
visited[i]=0;
}
}
}
//arry表示求子集的数组
//cur表示搜索当前位置
//n表示数组元素个数
//num表示此次生成子集的元素个数
void DFS1(int *arry, int cur, int num, int n)//按子集元素个数
{
if( num<=0)
{
for(int i=0; i<cur; i++)
if(visited[i])
cout<<arry[i]<<" ";
cout<<endl;
return;
}
for(int i=cur; i<n; i++)
{
if( !visited[i] )
{
visited[i]=1;
DFS1(arry, i+1, num-1, n);
visited[i]=0;
}
}
}
int main()
{
int n;
int arry[101];
while( cin>>n )
{
coun = 0;
memset(visited, 0, sizeof(visited));
for(int i=0; i<n; i++)
cin>>arry[i];
//按字典序生成
cout<<"按字典序生成:"<<endl;
DFS(arry, 0, n);
cout<<endl;
//按子集元素个数
cout<<"按子集元素个数: "<<endl;
for(int i=1; i<=n; i++)
DFS1(arry, 0, i, n);
cout<<endl;
}
}