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);
})();