#include <iostream>
#include <vector>
#include <algorithm>

void permute(std::vector<int>& nums, int start, int end, std::vector<std::vector<int>>& result) {
    if (start == end) {
        for (int i = 0; i < nums.size(); ++i) {
            std::cout << nums[i] << (i < nums.size() - 1 ? " " : "\n");
        }
        result.push_back(nums);
        return;
    }
    
    for (int i = start; i <= end; ++i) {
        std::swap(nums[start], nums[i]);
        permute(nums, start + 1, end, result);
        std::swap(nums[start], nums[i]); // backtrack
    }
}

int main() {
    int n;
    std::cin >> n;
    std::vector<int> nums(n);
    for (int i = 0; i < n; ++i) {
        nums[i] = i + 1;
    }
    std::vector<std::vector<int>> result; // 如果不需要存储结果,可以删除这个变量
    permute(nums, 0, n - 1, result); // 如果不需要存储结果,可以删除最后一个参数
    return 0;
}
/**************************************************************
	Problem: 1308
	User: admin
	Language: C++
	Result: Wrong Answer
****************************************************************/