#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++) printf("%d ",val[f[i]]);
			printf("\n");
			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: Wrong Answer
****************************************************************/