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