競プロキャンプ2026関西
コンテスト日時
2026/10/17 (Sa) 15:30 - 17:30

B - Evaluate F and G

Assam
2
s
1024
MB
100
点

問題文

$e$ を空文字列、$f(X)$ を文字列 $X$ に f を前置する関数、$g(X)$ を文字列 $X$ に g を前置する関数、$X+Y$ を文字列 $X$ と $Y$ をこの順に連結する演算とします。

以下のBNFにおける <expr> シンボルとして表される式 $S$ が与えられるので、その式を評価した文字列を答えてください。

<expr> ::= <term> | <expr> "+" <term>
<term> ::= "e" | <func>
<func> ::= "f(" <expr> ")" | "g(" <expr> ")"

ただし、式 $S$ 中の記号はそれぞれ以下の意味を持つものとします。

  • e $: e$ (空文字列)
  • f( <expr> ) $: f(\mathtt{\langle expr \rangle})$ (関数 $f$ )
  • g( <expr> ) $: g(\mathtt{\langle expr \rangle})$ (関数 $g$ )
  • + $: +$ (演算子 $+$ )

制約

  • $1 \leq |S| \leq 200{,}000$
  • $S$ は問題文で定義されたBNF上の <expr> シンボルとして表される

入力

入力は以下の形式で標準入力から与えられる。

$S$

出力

式 $S$ を評価した文字列を出力せよ。

入力例 1
f(g(e+f(e)))+g(e+e)
出力例 1
fgfg

以下のように評価されます。表示の都合上、空文字列は半角スペースで表示します。

$f(g(e+f(e)))+g(e+e) = f(g($ $+$f$))+g($ $) = f($gf$)+$g$ = $fgf$+$g$ = $fgfg

入力例 2
e
出力例 2

答えが空文字列であるため、改行のみを出力してください。

提出
C++23 (g++ 12.2.0)