#include <iostream>
using namespace std;
const int N = 10;
int path[N];//保存序列
bool state[N];//保存状态
int n;
void dfs(int u){
    if(u>n){ //递归边界
        for(int i = 1;i<=n;i++){ //输出序列
            cout << path[i] << " ";
        }
        cout << endl;
    }
    for(int i = 1;i<=n;i++){
        if(!state[i])//如果数字i没有没用过
        {
            path[u] = i;//将数字i放入序列
            state[i] = 1;//标记数字i已经用过
            dfs(u+1);//递归
            state[i] = 0;//回溯
        }
    }
}
int main(void) {
    cin >> n;//输入n
    dfs(1);//从第一位开始
    return 0;//结束
}