#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;
				puts(buffer);
			}

			break;
		}
	}
};

int main(void)
{
	char input[max_string_length];
	while (!feof(stdin) && fgets(input, max_string_length, stdin))
	{
		work(input);
	}
	return 0;
}
