// author: Paweł Wanat
#include<cstdio>
#include<vector>
using namespace std;
vector<int> first_combination(int k) {
vector<int> result;
for(int i=0; i<k; ++i) {
result.push_back(i);
}
return result;
}
bool next_combination(vector<int> & combination, int size) {
int idx = 0;
while(idx < combination.size() - 1 && combination[idx] + 1 == combination[idx + 1]) {
idx++;
}
if(combination[idx] + 1 == size) {
return false;
}
combination[idx]++;
while(idx-->0) {
combination[idx] = idx;
}
return true;
}
int main() {
vector<int> combination = first_combination(3);
do {
for(int i=0; i<combination.size(); ++i) {
printf("%d ", combination[i]);
}
printf("\n");
} while(next_combination(combination, 8));
combination = first_combination(3);
do {
for(int i=0; i<combination.size(); ++i) {
printf("%d ", combination[i]);
}
printf("\n");
} while(next_combination(combination, 4));
combination = first_combination(3);
do {
for(int i=0; i<combination.size(); ++i) {
printf("%d ", combination[i]);
}
printf("\n");
} while(next_combination(combination, 3));
return 0;
}