const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let params = [];
    while ((line = await readline())) {
        let tokens = line.split(" ");
        // let a = parseInt(tokens[0]);
        // let b = parseInt(tokens[1]);
        // console.log(a + b);
        params.push(tokens);
    }
    // console.log(params)
    let n_length = parseInt(params[0][0]);
    let result = [];
    let nums = [];
    for (let i = 0; i < n_length; i++) {
        nums[i] = i + 1;
    }
    // console.log(nums)
    function getCombines(origins) {
        function backTrace(arr) {
            if (result.length == n_length) {
                console.log(result.join(" "));
                return;
            }
            for (let i = 0; i < arr.length; i++) {
                // 先选中第一个数
                result.push(arr[i]);
                // 从剩下数中递归找另外一个数
                backTrace(arr.filter((v, index) => index != i));
                result.pop();
            }
        }
        backTrace(origins);
    }

    getCombines(nums);
})();