main.cpp
#include <cstdio>
#include <cstdlib>
#include <cstring>
void printArr(int n, int** arr){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
printf("[%d] ", arr[i][j]);
}
printf("\n");
}
}
void setCol(int n, int col, int elem, int** arr){
for(int i = 0; i < n; i++){
arr[i][col] = elem;
}
}
int func(int level, int elems, int n, int** arr){
//printf("L%d E%d\n", level, elems);
if(level < 0) return 0;
if(level > 0 && elems == 0) return 0;
int val = arr[level][n - elems];
//printf("VAL:%d\n", val);
if(val == 1){
//printf("val1\n");
return func(level + 1, elems -1, n, arr);
}
if(val == -1){
//printf("val-1\n");
return func(level - 1, elems - 1, n, arr);
}
if(level == elems) return 1;
return func(level + 1, elems -1, n, arr) + func(level - 1, elems - 1, n, arr);
}
int main(int argc, char** argv){
while(1){
char buf[1024];
if(scanf("%s", buf) == 0) break;
int n = strlen(buf);
int** arr = new int*[n];
for(int i = 0; i < n; i++){
arr[i] = new int[n];
for(int j = 0; j < n; j++){
arr[i][j] = 0;
}
}
for(int i = 0; i < n; i++){
char c = buf[i];
switch(c){
case '.':{
continue;
break;
}
case '(':{
setCol(n, i, 1, arr);
break;
}
case ')':{
setCol(n, i, -1, arr);
break;
}
}
}
//printArr(n, arr);
printf("%d\n", func(0, n, n, arr));
}
return 0;
}