shogo314君は加算よりもシフト演算の優先度が低いことを知らずに実装してしまい、不正解となってしまいました。 全能なshogo314君は実装を直さずに正解しようと思い、 左シフト演算の優先度を加算よりも強くし、かつ左シフト演算は右結合であるように世界を作り変えました。 さて、世界が作り変わる前の式はどのように評価されるでしょうか。
以下のBNF における<expr>に従う文字列 $F$ が与えられます。 $F$を式として評価した値を $998244353$ で割ったあまりを求めてください。
<expr> ::= <term> | <expr> "+" <term>
<term> ::= <primary> | <primary> "<<" <term>
<primary> ::= <posint> | "(" <expr> ")"
<posint> ::= <nonzero-digit> | <nonzero-digit> <digits>
<digits> ::= <digit> | <digits> <digit>
<digit> ::= "0" | <nonzero-digit>
<nonzero-digit>::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
ここで、 << は左シフトを表す二項演算子であり、 a<<b は $a\times 2^b$ と評価されます。
また、+は加算を表す二項演算子です。
さらに、 (と)で囲われた部分は先に計算されます。
この問題において、<<は右結合であることに注意してください。
入力は以下の形式で標準入力から与えられます。
$F$
$F$を式として評価したときの値を $998244353$ で割ったあまりを出力してください。
1<<2<<3+1
65537
(1<<(2<<3))+1 を式として評価した値と同じ値になります。
(((((((((((((((998244353)))))))))))))))
0
答えを $998244353$ で割ったあまりを出力することを忘れないでください。
456<<123<<789+(987<<321)<<654
542711207