#include <iostream>
#include <string>
#include <vector>
typedef std::vector<std::string> str_vector;
void combine(str_vector& w, const str_vector& u, const str_vector& v)
{
for(unsigned int t = 0; t < u.size(); t++)
for(unsigned int i = 0; i < v.size(); i++)
w.push_back("(" + u[t] + v[i] + ")");
}
str_vector problem(unsigned int n, char startLetter)
{
if(n == 1)
return str_vector(1,std::string(1,startLetter));
else
{
str_vector w;
for(unsigned int t = 1; t < n; t++)
combine(w, problem(t, startLetter), problem(n - t, startLetter + (char)t));
return w;
}
}
int main()
{
const str_vector& r = problem(4,'a');
for(unsigned int t = 0; t < r.size(); t++)
std::cout << r[t] << "\n";
std::cout << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3RyX3ZlY3RvcjsKCnZvaWQgY29tYmluZShzdHJfdmVjdG9yJiB3LCBjb25zdCBzdHJfdmVjdG9yJiB1LCBjb25zdCBzdHJfdmVjdG9yJiB2KQp7CiAgICBmb3IodW5zaWduZWQgaW50IHQgPSAwOyB0IDwgdS5zaXplKCk7IHQrKykKCQlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykKCQkJdy5wdXNoX2JhY2soIigiICsgdVt0XSArIHZbaV0gKyAiKSIpOwp9CgoKc3RyX3ZlY3RvciBwcm9ibGVtKHVuc2lnbmVkIGludCBuLCBjaGFyIHN0YXJ0TGV0dGVyKQp7CglpZihuID09IDEpCgkJcmV0dXJuIHN0cl92ZWN0b3IoMSxzdGQ6OnN0cmluZygxLHN0YXJ0TGV0dGVyKSk7CgllbHNlCgl7CgkJc3RyX3ZlY3RvciB3OwoJCWZvcih1bnNpZ25lZCBpbnQgdCA9IDE7IHQgPCBuOyB0KyspCgkJCWNvbWJpbmUodywgcHJvYmxlbSh0LCBzdGFydExldHRlciksIHByb2JsZW0obiAtIHQsIHN0YXJ0TGV0dGVyICsgKGNoYXIpdCkpOwoJCXJldHVybiB3OwoJfQp9CgppbnQgbWFpbigpCnsKCWNvbnN0IHN0cl92ZWN0b3ImIHIgPSBwcm9ibGVtKDQsJ2EnKTsKCWZvcih1bnNpZ25lZCBpbnQgdCA9IDA7IHQgPCByLnNpemUoKTsgdCsrKQoJCXN0ZDo6Y291dCA8PCByW3RdIDw8ICJcbiI7CglzdGQ6OmNvdXQgPDwgIlxuIjsKfQo=