#include <iostream>
#include <vector>
using namespace std;
int N; // 總共有N顆球(號碼是1-N)
int M; // 挑出M顆球
vector<int> box; // 未選中的號碼
vector<int> bag;// 我們選中的號碼
vector <bool>chosen;
void PickBall(int bag_pos,int box_pos){ // box_pos 代表藍色框框
// 停止條件(挑選滿M顆球就找到一組合法的組合)
// :輸出袋子裡的內容
if(bag_pos==M){
// for (int j=0;j<M;j++){
// for (int k=j+1;k<M;k++){
// if (bag[j]==bag[k]){
// return;
// }
// }
// }
for(int i=0;i<M;i++){
cout<<bag[i];
}
cout<<'\n';
return;
}
// 同一層遞迴
// 剪枝:box_pos=0,i可以選擇的範圍:[0,3] => [0,1]
for(int i=0;i<N;i++){ // i 代表這次選到的位置
if (chosen[box[i]]==false){ //检查是否被选过
chosen[box[i]]=true;
// 從藍色框框的範圍內選擇一個號碼把他複製到 bag
bag.push_back( box[i] );
// 遞迴呼叫自己:
PickBall(bag_pos+1,i+1);
// 離開遞迴後把這次選到的球從 bag 中放回去
bag.pop_back();
chosen[box[i]]=false;
}
}
}
int main() {
while(cin>>N){
M=N;
box.clear();
bag.clear();
chosen.clear();
for(int i=N;i>=1;i--){
box.push_back(i);
chosen.push_back(false);
}
chosen.push_back(false);
// 初始情況
PickBall(0,0);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IE47IC8vIOe4veWFseacie+8rumhhueQgyjomZ/norzmmK8xLU4pCmludCBNOyAvLyDmjJHlh7rvvK3poYbnkIMKdmVjdG9yPGludD4gYm94OyAvLyDmnKrpgbjkuK3nmoTomZ/norwKdmVjdG9yPGludD4gYmFnOy8vIOaIkeWAkemBuOS4reeahOiZn+eivAp2ZWN0b3IgPGJvb2w+Y2hvc2VuOwp2b2lkIFBpY2tCYWxsKGludCBiYWdfcG9zLGludCBib3hfcG9zKXsgLy8gYm94X3BvcyDku6Pooajol43oibLmoYbmoYYgCgkvLyDlgZzmraLmop3ku7Yo5oyR6YG45ru/77yt6aGG55CD5bCx5om+5Yiw5LiA57WE5ZCI5rOV55qE57WE5ZCIKQoJLy8gICAgICAgICDvvJrovLjlh7rooovlrZDoo6HnmoTlhaflrrkKCWlmKGJhZ19wb3M9PU0pewovLwkJZm9yIChpbnQgaj0wO2o8TTtqKyspewovLwkJCWZvciAoaW50IGs9aisxO2s8TTtrKyspewovLwkJCQlpZiAoYmFnW2pdPT1iYWdba10pewovLwkJCQkJcmV0dXJuOwovLwkJCQl9Ci8vCQkJfQovLwkJfQoJCWZvcihpbnQgaT0wO2k8TTtpKyspewoJCQljb3V0PDxiYWdbaV07CgkJfQoJCWNvdXQ8PCdcbic7CgkJcmV0dXJuOwoJfQoJLy8g5ZCM5LiA5bGk6YGe6L+0CgkvLyDliarmnp3vvJpib3hfcG9zPTDvvIxp5Y+v5Lul6YG45pOH55qE56+E5ZyN77yaWzAsM10gPT4gWzAsMV0KCWZvcihpbnQgaT0wO2k8TjtpKyspeyAvLyBpIOS7o+ihqOmAmeasoemBuOWIsOeahOS9jee9rgoJCWlmIChjaG9zZW5bYm94W2ldXT09ZmFsc2UpeyAgLy/mo4Dmn6XmmK/lkKbooqvpgInov4cKCQkJY2hvc2VuW2JveFtpXV09dHJ1ZTsKCQkvLyDlvp7ol43oibLmoYbmoYbnmoTnr4TlnI3lhafpgbjmk4fkuIDlgIvomZ/norzmiorku5bopIfoo73liLAgYmFnCgkJCWJhZy5wdXNoX2JhY2soIGJveFtpXSApOwoJCQkvLyDpgZ7ov7Tlkbzlj6voh6rlt7HvvJoKCQkJUGlja0JhbGwoYmFnX3BvcysxLGkrMSk7CgkJLy8g6Zui6ZaL6YGe6L+05b6M5oqK6YCZ5qyh6YG45Yiw55qE55CD5b6eIGJhZyDkuK3mlL7lm57ljrsKCQkJYmFnLnBvcF9iYWNrKCk7CgkJCWNob3Nlbltib3hbaV1dPWZhbHNlOwoJCX0KCX0KfQppbnQgbWFpbigpIHsKCXdoaWxlKGNpbj4+Til7CgkJTT1OOwoJCWJveC5jbGVhcigpOwoJCWJhZy5jbGVhcigpOwoJCWNob3Nlbi5jbGVhcigpOwoJCWZvcihpbnQgaT1OO2k+PTE7aS0tKXsKCQkJYm94LnB1c2hfYmFjayhpKTsKCQkJY2hvc2VuLnB1c2hfYmFjayhmYWxzZSk7CgkJfQoJCWNob3Nlbi5wdXNoX2JhY2soZmFsc2UpOwoJCS8vIOWIneWni+aDheazgQoJCVBpY2tCYWxsKDAsMCk7IAoJfQp9