#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
void backtrack(vector<int>& arr, int k, int start, vector<int>& path, vector<vector<int>>& result) {
if (path.size() == k) {
result.push_back(path);
return;
}
for (int i = start; i < arr.size(); ++i) {
path.push_back(arr[i]);
backtrack(arr, k, start, path, result);
path.pop_back();
}
}
vector<vector<int>> combinations(vector<int>& nums, int k) {
vector<vector<int>> result;
vector<int> path;
backtrack(nums, k, 0, path, result);
return result;
}
int main() {
int n;
cin >> n;
vector<int>arr1(n);
for (int i = 0; i < n; i++) {
arr1[i] = i + 1;
}
vector<vector<int>>arr = combinations(arr1, n);
for (int i = 0; i < arr.size(); i++) {
bool m = true;
for (int j = 0; j < arr[i].size()-1; j++) {
for (int k = j+1; k < arr[i].size(); k++) {
if (arr[i][j] == arr[i][k])
{
m = false;
break;
}
}
}
if (m) {
for (int j = 0; j < arr[i].size(); j++) {
cout << setw(5) << arr[i][j];
}
cout << endl;
}
}
return 0;
}