B51 - Bracket
Editorial
/
Time Limit: 2 sec / Memory Limit: 1024 MB
配点: 1000 点
問題文
対応の取れているカッコ列 S があります。
S の何文字目と何文字目が対応しているかを、全て出力してください。
たとえば、(())()
の場合、「1 文字目と 4 文字目」、「2 文字目と 3 文字目」、「5 文字目と 6 文字目」が対応しています。
ここで、対応の取れているカッコ列は以下のいずれかの条件を満たしている空でない文字列です。
()
- 対応の取れているカッコ列 A が存在し、
(
, A,)
をこの順に結合した文字列 - 対応の取れているカッコ列 A,B が存在し、A,B をこの順に結合した文字列
入力
入力は以下の形式で標準入力から与えられます。
S
出力
|S| を S の長さと表したとき、カッコの対応を以下の形式にしたがって |S|/2 行で出力せよ。
l_1 r_1 : l_{|S|/2} r_{|S|/2}
これは、「l_1 文字目と r_1 文字目」, ... ,「l_{|S|/2} 文字目と r_{|S|/2} 文字目」が対応していることを表します。
出力は以下の条件を満たす必要があります。
- 1 \leq l_i < r_i \leq |S| \ (1 \leq i \leq |S|/2)
- \text{max}(l_i, r_i) < \text{max}(l_{i + 1}, r_{i + 1}) \ (1 \leq i \leq |S|/2 - 1)
制約
- 1 \leq |S| \leq 200,000
- S は
()
の文字から構成される対応の取れたカッコ列
入力例 1
(())()
出力例 1
2 3 1 4 5 6