Олимпиадный тренинг

Задача . C. Удаление скобочной последовательности


Вам задана скобочная последовательность, состоящая из \(n\) символов '(' и/или )'. Вы производите над ней последовательность операций.

В течение одной операции вы выбираете кратчайший префикс этой строки (какое-то количество первых символов строки), который является хорошим, и удаляете его из строки.

Префикс считается хорошим, если выполняется одно из следующих двух условий:

  • этот префикс является правильной скобочной последовательностью;
  • этот префикс является палиндромом длины хотя бы два.

Скобочная последовательность называется правильной, если из нее возможно получить корректное арифметическое выражение вставкой символов '+' и '1' в эту последовательность. Например, последовательности (())(), () и (()(())) являются правильными, когда )(, (() и (()))( ими не являются.

Скобочная последовательность называется палиндромом, если она читается одинаково и вперед и назад. Например, скобочные последовательности )), (( и )(() являются палиндромами, а скобочные последовательности (), )( и ))( ими не являются.

Вы прекращаете производить операции тогда, когда невозможно найти ни одного хорошего префикса. Ваша задача — найти количество операций, которые вы произведете, а также количество оставшихся в строке символов после всех операций.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Следующие \(2t\) строк описывают сами наборы.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длину скобочной последовательности.

Вторая строка набора содержит \(n\) символов '(' и/или ')' — саму скобочную последовательность.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(5 \cdot 10^5\) (\(\sum n \le 5 \cdot 10^5\)).

Выходные данные

На каждый набор тестовых данных выведите два целых числа \(c\) и \(r\) — количество операций, которые вы произведете над данной скобочной последовательностью и количество оставшихся в ней символов после всех операций.


Примеры
Входные данныеВыходные данные
1 5
2
()
3
())
4
((((
5
)((()
6
)((()(
1 0
1 1
2 0
1 0
1 1

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя