//dfs 深度优先遍历
//bfs 宽度优先遍历
#include<cstdio>
const int N = 10;
int num[N];
bool st[N];
// 0 0 0
void dfs(int u, int n)
{
if (u == n)
{
for (int i = 0; i < n; i++)
printf("%5d", num[i]);
puts("");
return;
}
for (int i = 1; i <= n; i++)
{
if (st[i]) continue;
st[i] = true;
num[u] = i;
dfs(u + 1, n);
st[i] = false;
}
}
int main()
{
int n;
scanf("%d", &n);
//dfs(u, n) 已经填入u个数,求n的全排列
dfs(0, n);
return 0;
}