#include <stdio.h>
const int max_string_length = 256;
enum WORK_STATE
{
WORK_STATE_FIND_NAME,
WORK_STATE_READ_NAME,
WORK_STATE_READ_ARG
};
void work(const char const *inp)
{
char buffer[max_string_length];
int buffer_size;
enum WORK_STATE state = WORK_STATE_FIND_NAME;
int brackets_found, arg_start;
for (int i = 0; i < max_string_length && inp[i] > 0; ++i)
{
switch (state)
{
case WORK_STATE_FIND_NAME:
if (
(inp[i] >= 'A' && inp[i] <= 'Z') ||
(inp[i] >= 'a' && inp[i] <= 'z')
) {
buffer_size = 0;
buffer[buffer_size++] = inp[i];
state = WORK_STATE_READ_NAME;
}
break;
case WORK_STATE_READ_NAME:
if (
(inp[i] >= 'A' && inp[i] <= 'Z') ||
(inp[i] >= 'a' && inp[i] <= 'z') ||
(inp[i] >= '0' && inp[i] <= '9')
) {
buffer[buffer_size++] = inp[i];
}
else if (inp[i] == '(')
{
buffer[buffer_size++] = inp[i];
arg_start = buffer_size;
brackets_found = 1;
state = WORK_STATE_READ_ARG;
}
else
{
state = WORK_STATE_FIND_NAME;
}
break;
case WORK_STATE_READ_ARG:
if (inp[i] == '(')
{
brackets_found += 1;
}
else if (inp[i] == ')')
{
brackets_found -= 1;
if (brackets_found == 0)
{
buffer[buffer_size] = 0;
work(buffer + arg_start);
state = WORK_STATE_FIND_NAME;
}
}
buffer[buffer_size++] = inp[i];
if (state == WORK_STATE_FIND_NAME)
{
buffer[buffer_size] = 0;
}
break;
}
}
};
int main(void)
{
char input[max_string_length];
while (!feof(stdin
) && fgets(input
, max_string_length
, stdin
)) {
work(input);
}
return 0;
}