#include #include int main(int argc, char **argv) { int length, maxlength, stacksize; length = maxlength = stacksize = 0; while (true) { int c; c = getc(stdin); if (c == '\n') { /* Remove extra left parenthesis and check if it's the longest substring. */ if (length - stacksize > maxlength) { maxlength = length - stacksize; } printf("%d\n", maxlength); length = maxlength = stacksize = 0; } else if (c == EOF) { putchar('\n'); break; } else if (c == '(') { length++; stacksize++; } else if (c == ')') { stacksize--; length++; if (stacksize == 0 && length > maxlength) { /* Parenthesis substring completely closed, keep length and continue counting. */ maxlength = length; } else if (stacksize < 0) { /* Extra closing parenthesis, reset all counters. */ length = 0; stacksize = 0; } } } }