310462: CF1837D. Bracket Coloring

Memory Limit:512 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

D. Bracket Coloringtime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard output

A regular bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting characters "1" and "+" between the original characters of the sequence. For example:

  • the bracket sequences "()()" and "(())" are regular (the resulting expressions are: "(1)+(1)" and "((1+1)+1)");
  • the bracket sequences ")(", "(" and ")" are not.

A bracket sequence is called beautiful if one of the following conditions is satisfied:

  • it is a regular bracket sequence;
  • if the order of the characters in this sequence is reversed, it becomes a regular bracket sequence.

For example, the bracket sequences "()()", "(())", ")))(((", "))()((" are beautiful.

You are given a bracket sequence $s$. You have to color it in such a way that:

  • every bracket is colored into one color;
  • for every color, there is at least one bracket colored into that color;
  • for every color, if you write down the sequence of brackets having that color in the order they appear, you will get a beautiful bracket sequence.

Color the given bracket sequence $s$ into the minimum number of colors according to these constraints, or report that it is impossible.

Input

The first line contains one integer $t$ ($1 \le t \le 10^4$) — the number of test cases.

Each test case consists of two lines. The first line contains one integer $n$ ($2 \le n \le 2 \cdot 10^5$) — the number of characters in $s$. The second line contains $s$ — a string of $n$ characters, where each character is either "(" or ")".

Additional constraint on the input: the sum of $n$ over all test cases does not exceed $2 \cdot 10^5$.

Output

For each test case, print the answer as follows:

  • if it is impossible to color the brackets according to the problem statement, print $-1$;
  • otherwise, print two lines. In the first line, print one integer $k$ ($1 \le k \le n$) — the minimum number of colors. In the second line, print $n$ integers $c_1, c_2, \dots, c_n$ ($1 \le c_i \le k$), where $c_i$ is the color of the $i$-th bracket. If there are multiple answers, print any of them.
ExampleInput
4
8
((())))(
4
(())
4
))((
3
(()
Output
2
2 2 2 1 2 2 2 1
1
1 1 1 1
1
1 1 1 1
-1

Input

题意翻译

如果一个括号序列符合以下两个条件中的一个,那么它是优美的: 1、序列的任意一个前缀中,左括号的个数不少于右括号的个数,且整个序列中,左括号的个数等于右括号的个数。 2、序列的任意一个前缀中,右括号的个数不少于左括号的个数,且整个序列中,左括号的个数等于右括号的个数。 给定一个括号序列,你需要把它分成若干组,使得每一组的括号构成的序列都是优美的。求最少需要分成多少组,并输出分组方案。如果无解,输出 $ -1 $。

Output

题目大意:
给定一个括号序列,要求对其进行最少颜色的着色,使得每个括号都被着色,并且对于每种颜色,如果你按照括号出现的顺序写下该颜色的括号序列,你将得到一个“美丽”的括号序列。所谓“美丽”的括号序列是指:它要么是一个“正规”的括号序列,要么将其中的字符顺序反转后可以得到一个“正规”的括号序列。所谓“正规”的括号序列是指可以通过在原始序列的字符之间插入“1”和“+”来形成一个正确的算术表达式。如果无法按要求着色,则输出-1。

输入输出数据格式:
输入:
- 第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。
- 每个测试用例包含两行,第一行包含一个整数n(2≤n≤2×10^5),表示序列s的长度。第二行包含一个由n个字符组成的字符串s,每个字符要么是“(”,要么是“)”。
- 所有测试用例的n之和不超过2×10^5。

输出:
- 对于每个测试用例,如果无法按要求着色,则输出-1。
- 否则,第一行输出一个整数k(1≤k≤n),表示最少的颜色数量。第二行输出n个整数c1,c2,…,cn(1≤ci≤k),其中ci是第i个括号的着色。如果有多个答案,输出其中任意一个。题目大意: 给定一个括号序列,要求对其进行最少颜色的着色,使得每个括号都被着色,并且对于每种颜色,如果你按照括号出现的顺序写下该颜色的括号序列,你将得到一个“美丽”的括号序列。所谓“美丽”的括号序列是指:它要么是一个“正规”的括号序列,要么将其中的字符顺序反转后可以得到一个“正规”的括号序列。所谓“正规”的括号序列是指可以通过在原始序列的字符之间插入“1”和“+”来形成一个正确的算术表达式。如果无法按要求着色,则输出-1。 输入输出数据格式: 输入: - 第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。 - 每个测试用例包含两行,第一行包含一个整数n(2≤n≤2×10^5),表示序列s的长度。第二行包含一个由n个字符组成的字符串s,每个字符要么是“(”,要么是“)”。 - 所有测试用例的n之和不超过2×10^5。 输出: - 对于每个测试用例,如果无法按要求着色,则输出-1。 - 否则,第一行输出一个整数k(1≤k≤n),表示最少的颜色数量。第二行输出n个整数c1,c2,…,cn(1≤ci≤k),其中ci是第i个括号的着色。如果有多个答案,输出其中任意一个。

加入题单

上一题 下一题 算法标签: