#include <cstdio>
using namespace std;
char ball[] = {'a', 'b'}; // ball[0] == 'a', ball[1] == 'b'
int current[] = {0, 0, 0}; // 3자리~
bool is_valid() {
int valid_count[] = {2, 1};
for(int i = 0; i < sizeof current / sizeof current[0]; ++i) {
if(--valid_count[ current[i] ] < 0) { // 정상적인 수보다 더 많으면
return false;
}
}
return true;
}
int main() {
while(current[0] < sizeof ball) { // 2, 0, 0이 되는 순간 종료
if(is_valid()) { // 유효한 조합인지 체크 (a 2개 b 하나)
// 조합 출력
for(int i = 0; i < sizeof current / sizeof current[0]; ++i) {
putchar(ball[current[i]]);
}
putchar('\n');
}
++current[ sizeof current / sizeof current[0] - 1 ]; // 마지막 자리를 1 증가
for(int i = sizeof current / sizeof current[0] - 1; i > 0; --i) { // 자리올림 구현
if(current[i] >= sizeof ball)
current[i] = 0, ++current[i - 1];
else break;
}
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNoYXIgCWJhbGxbXSAJCT0geydhJywgJ2InfTsgLy8gYmFsbFswXSA9PSAnYScsIGJhbGxbMV0gPT0gJ2InCmludCAJY3VycmVudFtdIAk9IHswLCAwLCAwfTsgIC8vIDPsnpDrpqx+Cgpib29sIGlzX3ZhbGlkKCkgewoJaW50IHZhbGlkX2NvdW50W10gPSB7MiwgMX07CgkKCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplb2YgY3VycmVudCAvIHNpemVvZiBjdXJyZW50WzBdOyArK2kpIHsKCQlpZigtLXZhbGlkX2NvdW50WyBjdXJyZW50W2ldIF0gPCAwKSB7IC8vIOygleyDgeyggeyduCDsiJjrs7Tri6Qg642UIOunjuycvOuptAoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJCglyZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKSB7Cgl3aGlsZShjdXJyZW50WzBdIDwgc2l6ZW9mIGJhbGwpIHsgLy8gMiwgMCwgMOydtCDrkJjripQg7Iic6rCEIOyiheujjAoJCWlmKGlzX3ZhbGlkKCkpIHsgLy8g7Jyg7Zqo7ZWcIOyhsO2VqeyduOyngCDssrTtgawgKGEgMuqwnCBiIO2VmOuCmCkKCQkJLy8g7KGw7ZWpIOy2nOugpQoJCQlmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGN1cnJlbnQgLyBzaXplb2YgY3VycmVudFswXTsgKytpKSB7CgkJCQlwdXRjaGFyKGJhbGxbY3VycmVudFtpXV0pOwoJCQl9CgkJCXB1dGNoYXIoJ1xuJyk7CgkJfQoJCQoJCSsrY3VycmVudFsgc2l6ZW9mIGN1cnJlbnQgLyBzaXplb2YgY3VycmVudFswXSAtIDEgXTsgLy8g66eI7KeA66eJIOyekOumrOulvCAxIOymneqwgAoJCWZvcihpbnQgaSA9IHNpemVvZiBjdXJyZW50IC8gc2l6ZW9mIGN1cnJlbnRbMF0gLSAxOyBpID4gMDsgLS1pKSB7IC8vIOyekOumrOyYrOumvCDqtaztmIQKCQkJaWYoY3VycmVudFtpXSA+PSBzaXplb2YgYmFsbCkKCQkJCWN1cnJlbnRbaV0gPSAwLCArK2N1cnJlbnRbaSAtIDFdOwoJCQllbHNlIGJyZWFrOwoJCX0KCX0KCQoJcmV0dXJuIDA7Cn0=