#include <iostream>
#include <vector>
class Program {
public:
std::vector<std::string> generateParenthesis(int n) {
std::vector<std::string> result;
createPairs(result, "", 0, 0, n);
return result;
}
void printVector(std::vector<std::string> const &v) {
for (auto const &n: v) {
std::cout << n << " ";
}
}
private:
void createPairs(std::vector<std::string>& result, std::string current, int left, int right, int n) {
if (current.size() == 2 * n) {
result.push_back(current);
return;
}
if (left < n) {
createPairs(result, current + '(', left + 1, right, n);
}
if (right < left) {
createPairs(result, current + ')', left, right + 1, n);
}
}
};
int main()
{
Program p;
std::vector result = p.generateParenthesis(3);
p.printVector(result);
}
/*
run:
((())) (()()) (())() ()(()) ()()()
*/