#include <iostream>
#include <vector>
using namespace std;
int length,n;
vector<vector<int>> ans;
void find(vector<int> &a,vector<int> &t,int index){
if(t.size() == length){ //长度为指定长度时,保存到ans后,返回,结束这一次递归
ans.push_back(t);
return;
}
for(int i=index;i<n;i++){
t.push_back(a[i]);
find(a,t,i+1);
t.pop_back(); //回溯
}
}
int main()
{
cin>>n;
vector<int> a(n,0),t;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=1;i<=n;i++){ //长度递增
length++;
find(a,t,0);
}
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
vector<vector<int>> ans;
vector<int> tmp, a;
int v[10010];
void get(int id,int len)
{
if(id==len){
ans.push_back(tmp);
return;
}
for(int i=0;i<a.size();i++)
{
if(v[i]) continue;
tmp.push_back(a[i]);
v[i]=1;
get(id+1,len);
tmp.pop_back();
v[i]=0;
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
a.push_back(x);
}
for(int i=1;i<=n;i++) get(0,i);
// get(0,2);
for(int i=0;i<ans.size();i++)
{
for(int j=0;j<ans[i].size();j++) cout<<ans[i][j]<<' ';
cout<<endl;
}
return 0;
}