Time Limit: 2 sec / Memory Limit: 1024 MB
問題文
あなたは C 言語に似たコメントアウトの仕組みを実装してみることにしました。
英小文字、 /
および *
からなる長さ N の文字列 S が与えられます。
あなたは S に対して以下の一連の操作を行います。
- 整数値を取る変数 x を用意する。はじめ x は 1 で初期化されている。
- 次の条件を満たす n を探す。
- x \leq n \leq |S| - 1
- S の n 文字目は
/
、S の n + 1 文字目は*
- 2.の条件を満たす n が存在しない場合は操作を終了する。そうでない場合は、条件を満たす n のうち最小のものを i とおく。
- 次の条件を満たす n を探す。
- i + 2 \leq n \leq |S| - 1
- S の n 文字目は
*
、S の n + 1 文字目は/
- 4.の条件を満たす n が存在しない場合は操作を終了する。そうでない場合は、条件を満たす n のうち最小のものを j とおく。
- S の i 文字目から j + 1 文字目までを取り除き、残った文字列を順序を保って連結したものを新たな S とする。その後、x の値を i に更新して 2. に戻る。
操作を終了した時点での S を出力してください。
制約
- 1 \leq N \leq 10^6
- S は英小文字、
/
および*
からなる長さ N の文字列 - N は整数
入力
入力は以下の形式で標準入力から与えられる。
N S
出力
操作を終了した時点での S を出力せよ。
入力例 1
7 a/*b*/c
出力例 1
ac
以下の説明では S の n 文字目を S_n と表します。
操作の内容を説明すると次のようになります。
- はじめ、S =
a/*b*/c
, x = 1 である。 - 2.の条件を満たす n を探す。n = 2 は x \leq n \leq |S|-1 かつ S_{n} =
/
、S_{n+1} =*
という条件を満たし、かつ条件を満たす n の最小値である。よって i = 2 とおく。 - 4.の条件を満たす n を探す。n = 5 は i + 2 \leq n \leq |S| - 1 かつ S_{n} =
*
、 S_{n+1} =/
という条件を満たし、かつ条件を満たす n の最小値である。よって j = 5 とおく。 - S の i = 2 文字目から j + 1 = 6 文字目までを取り除き、残った文字列を順序を保って連結したものを新たな S とする。S は
ac
になる。その後、x の値を 2 に更新して、手順 2. に戻る。 - 2.の条件を満たす n を探すと、そのような n は存在しないことがわかる。よって、操作を終了する。
操作を終了した時点での S は ac
です。よってこれを出力します。
入力例 2
10 /*a*//*b*/
出力例 2
操作を終了した時点で S が空文字列になる場合もあります。
入力例 3
18 /*/a/*b*/c/*d*/e*/
出力例 3
ce*/
Problem Statement
You want to implement a C-like comment-out system.
You are given a length-N string S consisting of /
, *
, and lowercase English letters.
You are asked to perform the following procedure against S.
- Prepare a variable x that takes on an integer value. x is initialized with 1.
- Seek for an n such that:
- x \leq n \leq |S| - 1; and
- the n-th character of S is
/
and the (n + 1)-th character of S is*
.
- If no n satisfies the conditions in step 2, terminate the procedure. Otherwise, let i be the smallest such n.
- Seek for an n such that:
- i + 2 \leq n \leq |S| - 1; and
- the n-th character of S is
*
and the (n + 1)-th character of S is/
.
- If no n satisfies the conditions in step 4, terminate the procedure. Otherwise, let j be the smallest such n.
- Remove the i-th through (j + 1)-th characters of S, concatenate the remaining strings without changing the order, and set S to the resulting string. Set x to i, and go back to step 2.
Print S resulting from the procedure.
Constraints
- 1 \leq N \leq 10^6
- S is a length-N string consisting of
/
,*
, and lowercase English letters. - N is an integer.
Input
The input is given from Standard Input in the following format:
N S
Output
Print the S resulting from the procedure.
Sample Input 1
7 a/*b*/c
Sample Output 1
ac
In this description, we denote the n-th character of S by S_n.
The procedure proceeds as follows.
- Initially, S =
a/*b*/c
and x = 1. - Seek for an n satisfying the conditions in step 2. n = 2 satisfies x \leq n \leq |S|-1, S_{n} =
/
, and S_{n+1} =*
, and is the minimum n that satisfies these conditions. Thus, let i = 2. - Seek for an n satisfying the conditions in step 4. n = 5 satisfies i + 2 \leq n \leq |S| - 1, S_{n} =
*
, and S_{n+1} =/
, and is the minimum n that satisfies these conditions. Thus, let j = 5. - Remove the i = 2-nd through j + 1 = 6-th characters of S, concatenate the remaining strings without changing the order, and set S to the resulting string. Now S is
ac
. Set x to 2, and go back to step 2. - Seeking for an n satisfying the conditions in step 2, one finds that there is no such n. Thus, the procedure terminates here.
At the end of the procedure, S results in ac
, which should be printed.
Sample Input 2
10 /*a*//*b*/
Sample Output 2
At the end of the procedure, S may result in an empty string.
Sample Input 3
18 /*/a/*b*/c/*d*/e*/
Sample Output 3
ce*/