#include<bits/stdc++.h>
using namespace std;
int n,val[10],v[10],f[10];//val值  visit  f是存放打印的下标 
//val 2   4  6 
//f   1   2  3
//    1   3  2  


void dfs(int x){
	if(x>n){//x超出N代表都选择完毕 
		for(int i=1;i<=n;i++) cout<<val[f[i]]<<" ";
		cout<<endl; 
		return;
	}
	for(int i=1;i<=n;i++){
		if(v[i]==0){//只有没访问过才能访问 
			f[x]=i;//增加这个i到f打印去
			v[i]=1;//设为访问过 
			dfs(x+1);
			v[i]=0;	//取消设为访问过 
		}
	} 
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>val[i];
	dfs(1);//起点是1  因为x等下要和f下标有关系。我们为了让数组从1开始 
}

/**************************************************************
	Problem: 1685
	User: admin
	Language: C++
	Result: Time Limit Exceed
****************************************************************/