問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
プログラムを表す文字列 s が与えられます。
また、q 個のクエリが与えられます。各クエリで、整数 l, r, x が与えられるので、文字列 s の l 文字目から r 文字目までを切り出した文字列をプログラムとして実行した場合の、変数 x の値を求めてください。
プログラムは以下のルールで与えられます。
・ プログラム全体は、「代入文;代入文; ... ;代入文;」という形式で表されます。
・ 代入は「変数=値」という形式でおこなわれ、このとき変数に値が代入されます。
・ 値とは以下のいずれかです。
1. 整数
2. 変数の値 (ただし、その変数が以前に出現していない場合は、その変数の値は 0 とみなします)
・ 英小文字からなる連続する文字列は整数型の変数を表します。
たとえば、プログラム 'a=1;b=a;c=b;a=21;' が与えられた場合、このプログラムを実行すると、変数 a は 21、変数 b は 1、変数 c は 1 となります。
s
q
l_1 r_1 x_1
l_2 r_2 x_2
...
l_q r_q x_q
i 行目に、文字列 s の l_i 文字目から r_i 文字目までを切り出した文字列をプログラムとして実行した場合の、変数 x_i の値を整数で出力してください。
出力の最後に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件を満たします。
・ 1 ≦ |s| ≦ 30000 = 3 × 10^4 (|s| は文字列 s の長さ)
・ s に出現する変数名の長さは 1 以上 10 以下
・ s に出現する整数は 1 以上 1000000000 以下
・ 1 ≦ q ≦ 30000 = 3 × 10^4
・ 1 ≦ l_i ≦ r_i ≦ |s| (1 ≦ i ≦ q)
・ 各クエリにおいて、文字列 s の l_i 文字目から r_i 文字目までを切り出した文字列はプログラムとして正しい (1 ≦ i ≦ q)
・ l_i ≠ 1 ならば、s の l_i-1 文字目は ';' である (1 ≦ i ≦ q)
・ s の r_i 文字目は ';' である (1 ≦ i ≦ q)
・ 1 ≦ |x_i| ≦ 10 (1 ≦ i ≦ q)
・ x_i は英小文字からなる文字列 (1 ≦ i ≦ q)
a=1;b=a;c=b;a=21;
4
1 4 a
1 8 b
1 12 c
1 17 a
1
1
1
21
x=1;y=2;tmp=x;x=y;y=tmp;
6
1 24 x
1 24 y
1 24 tmp
5 24 x
5 24 y
5 24 tmp
2
1
1
2
0
0