lz的括号问题
题号:NC279313
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个由n对括号组成的字符串,按每个(出现的先后顺序给每对括号编号,比如((()))(()),编号后为1233214554
每两个相同的数字代表的是原字符串中匹配的括号,每对匹配上的括号会直接删除(括号匹配的定义为:你可以从给定字符串中任意选择一个长度为2且为()的连续子序列删除,并将删除位置后面的所有下标减2)。
按顺序输出每对括号删除之前至多可以删除多少对括号,如果不能匹配上所有括号则输出-1

输入描述:

第一行一个整数n(1 \leq n \leq 10^5)
第二行一个字符串s,仅由()组成长度为2*n

输出描述:

一行n个整数,表示第i对括号在删除前最多删除多少对括号
示例1

输入

复制
5
((()))(())

输出

复制
4 3 2 4 3

说明

编号为1的括号可以在其他所有括号删除之后删除,答案为4
编号为2的括号不能在编号为1的括号之前删除,答案为3
编号为3的括号不能在编号为1,2的括号之前删除,答案为2
示例2

输入

复制
3
(()))(

输出

复制
-1

说明

所有的括号无法匹配