import java.util.Scanner;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    // 递归生成全排列的方法
    // listA: 当前已排列的部分
    // listB: 待排列的元素集合
    public static void fullPermutation(ArrayList<Integer> listA,
                                       ArrayList<Integer> listB) {
        int len_b = listB.size(); // 获取待排列元素的个数
        // 基准情况:如果listB为空,说明所有元素都已排列完成
        if (len_b == 0) {
            for (Integer i : listA) {
                System.out.print(i + " "); // 输出当前排列结果
            }
            System.out.println();
        } else {
            // 递归情况:遍历listB中的每个元素
            for (int i = 0; i < len_b; i++) {
                // 创建当前排列和待排列列表的副本(避免修改原列表)
                ArrayList<Integer> tempA = (ArrayList<Integer>) listA.clone();
                ArrayList<Integer> tempB = (ArrayList<Integer>) listB.clone();

                // 从待排列列表中移除第i个元素,并添加到当前排列中
                tempA.add(tempB.remove(i));

                // 递归调用,继续排列剩余元素
                fullPermutation(tempA, tempB);
            }
        }
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in); // 创建Scanner对象读取输入
        int n = input.nextInt(); // 读取用户输入的整数n

        ArrayList<Integer> listA = new
        ArrayList<>(); // 初始化当前排列列表(空)
        ArrayList<Integer> listB = new ArrayList<>(); // 初始化待排列元素列表

        // 初始化待排列的listB,添加1到n的整数
        for (int i = 1; i <= n; i++) {
            listB.add(i);
        }

        // 调用全排列方法
        fullPermutation(listA, listB);

        input.close(); // 关闭Scanner(建议添加)
    }



}