AT_arc148_f [ARC148F] 998244353 → 1000000007
Description
[problemUrl]: https://atcoder.jp/contests/arc148/tasks/arc148_f
**この問題は output-only です。**
符号無し 64 bit 整数の加算・乗算・ $ 998244353 $ を除数とする modulo 演算ができるプログラミング言語があります。
この言語を用いて $ \text{mod\ }1000000007 $ における乗算を行うプログラムを作成してください。
厳密に説明すると、$ 0 $ 以上 $ 1000000006 $ 以下の整数 $ a,b $ が与えられたときに $ a\ \times\ b\ \bmod{1000000007} $ を計算するプログラムを、以下の **仕様**・**形式** に従って作成してください。
Input Format
標準入力から与えられる入力は空である。
Output Format
問題文に書かれている仕様・形式に従ったプログラムを出力せよ。
Explanation/Hint
### プログラムの仕様
このプログラムでは、英大文字で表される $ A,\ B,\ \dots,\ Z $ の $ 26 $ 個の **変数** を扱うことが出来る。
各変数は $ 0 $ 以上 $ 2^{64} $ 未満の整数値 (以下 **符号無し 64 bit 整数** と表記) を保持することが出来る。
プログラムの実行開始時点で、$ A $ には整数 $ a $ が、$ B $ には整数 $ b $ が、それ以外の変数には $ 0 $ が代入されている。
プログラムの実行終了時点で変数 $ C $ に $ a\ \times\ b\ \bmod{1000000007} $ が保持されている必要がある。
### プログラムの形式
プログラムの $ 1 $ 行目にはプログラムの命令数を表す整数 $ N $ $ (1\ \leq\ N\ \leq\ 100) $ が書かれる。
プログラムの $ 2 $ 行目から $ N\ +\ 1 $ 行目には $ N $ 個の命令が書かれる。命令は上から下に順次実行される。
命令は次の 3 つのいずれかである。
- `add x y z`
- $ x $ に $ (y\ +\ z)\ \bmod{2^{64}} $ を代入する。ここでは $ x $ は変数、$ y,\ z $ は変数または符号無し 64 bit 整数である。
- `mul x y z`
- $ x $ に $ y\ \times\ z\ \bmod{2^{64}} $ を代入する。ここでは $ x $ は変数、$ y,\ z $ は変数または符号無し 64 bit 整数である。
- `rem x y`
- $ x $ に $ y\ \bmod{998244353} $ を代入する。ここでは $ x $ は変数、$ y $ は変数または符号無し 64 bit 整数である。
### ジャッジ
提出されたプログラムの形式が誤っていた場合、ジャッジの判定は不定である。
提出されたプログラムの形式が正しい場合、ジャッジは $ 1 $ ケース毎に $ 10^4 $ 個の整数の組 $ (a,\ b) $ $ (0\ \leq\ a,\ b\ \leq\ 1000000006) $ に対してプログラムを独立に実行する。(整数の組はジャッジ側があらかじめ用意したものであり、テストケース毎に固定である。)
全ての $ (a,\ b) $ の組に対して実行終了時に変数 $ C $ に $ a\ \times\ b\ \bmod{1000000007} $ が保持されている場合、ジャッジの判定は `AC` となる。そうでない場合は `WA` となる。
### Sample Explanation 1
正しい形式で書かれたプログラムの例を示します。(このプログラムは仕様を満たしていないため、提出しても `WA` となります。) このプログラムの実行終了時点で各変数に代入されている値は次の通りです。 - $ A $ : $ a\ +\ 10 $ - $ B $ : $ b $ - $ C $ : $ a\ \times\ b\ \bmod{998244353} $ - $ D $ : $ b\ +\ 2 $ - $ E $ : $ 1 $ - それ以外の変数 : $ 0 $