#include <vector>
#include <iostream>
using namespace std;
int main(){
int num_size = 5;
int num_length = 3;
vector<int> list;
int first_child = 1;
int last_child = num_length;
int currentNum = 0;
int i = 1;
while (list.size() != num_length){
list.push_back(i);
i++;
}
while ((first_child - num_length + 1) != (num_size - num_length + 1) && last_child != num_size){
// 如果数据满员
currentNum = list[num_length - 1];
if (list.size() == num_length){
for (int i = 0; i < list.size(); i++){
cout << list[i] << " ";
}
cout << endl;
if (list[0] == (num_size - num_length + 1) && list[num_length - 1] == num_size){
break;
}
while (list[num_length - 1] != num_size){
list.pop_back();
currentNum++;
list.push_back(currentNum);
for (int i = 0; i < list.size(); i++){
cout << list[i] << " ";
}
cout << endl;
}
// 开始清理
int count = 0;
for (int i = num_length - 1; i >= 0; i--){
if (list[i] == (num_size - num_length + 1 + i)){
count++;
}
}
int pop = list[list.size() - count - 1];
for (int i = 0; i < count + 1; i++){
list.pop_back();
}
pop++;
if (pop == num_size){
pop = first_child + 1;
first_child++;
}
for (int i = pop; i < pop + count + 1; i++){
list.push_back(i);
}
}
if (first_child == (num_size - num_length + 1)){
break;
}
}
return 0;
}