#include <iostream>
#include <vector>
using namespace std;
void printParenthesis(int n, int left, int right, int idx, char *output)
{
if (left == n && right == n)
{
for (int i=0; i<2*n; i++)
printf ("%c", output[i]);
printf("\r\n");
return;
}
if (left < n)
{
output[idx] = '(';
printParenthesis(n, left+1, right, idx+1, output);
}
if (right < left)
{
output[idx] = ')';
printParenthesis(n, left, right+1, idx+1, output);
}
return;
}
int main(int argc, const char * argv[]) {
int k = 4;
vector<char> vtr(2*k);
printParenthesis(k, 0, 0, 0, &vtr[0]);
return 0;
}