alexjercan/bugnet huggingface dataset:
Problem I : RMQ

n 個の数字a0 ,a1 , ... ,an-1 とq が与えられる。

q 個のクエリーに対して適切な処理を行なって欲しい。

クエリーは以下の3種類の操作が存在する。

値のシフトを行う

l とr のペアが与えられる。(l < r )
al から ar までの値を Circular Shiftさせる。

0 1 2 3 4 5 6 7 8 9

に対してl=2,r=5というクエリーが与えられたとする。

シフトを行った数字列は

0 1 5 2 3 4 6 7 8 9

となる。

最小値を求める

l とr のペアが与えられる。(l ≤ r )

al から arまでの値の中で最小の値を求める。

値の更新

pos と val のペアが与えられる。
apos の値を val に更新する。

Input

入力は以下のフォーマットで与えられる。

n q
a0
a1
.
.
.
an-1
x1 y1 z1
x2 y2 z2
.
.
.
xq yq zq

xi = 0 なら、シフトのクエリーを表す。このとき、l = yi , r = zi とする。

xi = 1 なら、最小値を求めるクエリーを表す。このとき、l = yi , r = zi とする。

xi = 2 なら、値を更新するクエリーを表す。このとき、pos = yi , val = zi とする。

入力は以下の制約を満たす

1 ≤ n , q ≤ 200,000

0 ≤ ai ≤ 10,000,000

値を更新するクエリーについて、0 ≤ val ≤ 10,000,000

Output

クエリーとしてxi = 1 が与えられたときに、答えの値を１行に出力せよ。

Sample Input 1

10 3
0
1
2
3
4
5
6
7
8
9
1 5 7
0 2 5
1 5 7

Sample Output 1

5
4

Sample Input 2

10 10
289383
930886
692777
636915
747793
238335
885386
760492
516649
641421
2 7 368690
1 3 6
0 2 6
1 1 8
0 2 9
2 2 665123
1 5 9
0 2 8
2 7 961393
1 1 2

Sample Output 2

238335
238335
238335
368690
Problem A: Rental DVD Shop NEO

Problem

僕はレンタルDVDショップ、「NEO」でアルバイトを始めた。まずはこの店の料金システムを勉強することになった。

レンタルDVDは旧作、準新作、新作の3種類存在し、1本のレンタル料金がそれぞれ a 円、 b 円、 c 円である。
会計の際に以下に示すセットレンタルを複数回適用することができる。

まだセットレンタルを適用していないDVDを数本選ぶ。

選んだDVDの本数が d 本以上の場合、選んだDVDの合計金額が、 (選んだDVDの本数) * e 円を超える場合は、それらを (選んだDVDの本数) * e 円でレンタル出来る。

選んだDVDの本数が d 本未満の場合、選んだDVDの合計金額が d * e 円を超える場合は、それらを d * e 円でレンタル出来る。

上記に当てはまらない場合、選んだDVDは通常料金でレンタルとなる。

ここで僕はある問題に気づいた。セットレンタルはレジに通した時に自動的に適用されるのではなく、手動で適用しているのだ。これでは最適ではない（もっと安くなる余地がある）セットレンタルの適用をしてしまう可能性がある。これではクレームが発生しかねない。僕はクレーム対応が嫌いなので、セットレンタルを最適に適用した時の料金を計算するプログラムを作成することにした。

Input

入力は複数のデータセットからなる。
各データセットは以下で表される。
1行目は5つの整数 a , b , c , d , e がスペース区切りで与えられる。
2行目にはレンタル本数が与えられる。3つの整数 na , nb , nc がスペース区切りで与えられる。それぞれ旧作、準新作、新作のDVDの本数を表す。
入力の終わりは5つのゼロからなる。

a b c d e
na nb nc

Constraints

入力は以下の条件を満たす。

入力に含まれる値はすべて整数

0 < a < b < e < c ≤ 1000

0 < d ≤ 100000

0 ≤ na , nb , nc ≤ 100000

0 < na + nb + nc

データセットの数は100個以下

Output

各データセットにつき、セットレンタルを最適に適用した時の料金を1行に出力せよ。

Sample Input

70 100 340 4 200
1 1 4
70 100 340 4 200
0 1 3
70 100 340 4 200
1 1 2
0 0 0 0 0

Sample Output

970
800
800
Problem B: Independent Research

Problem

僕は夏休みの自由研究のテーマとして、生き物観察を選択し、生き物観察キットを購入した。

この生き物は3次元グリッド状の空間を好んで生息する。
各セルには最大1匹までしか入れない。
周囲の環境に合わせ1日が経過するごとに誕生と死滅を繰り返す。

誕生と死滅の条件は、セルに隣接する生き物の数に依存する。
ここで、あるセルに生き物が隣接するとは、あるセルと生き物が生息しているもう一つのセルが面、辺、または点を共有していることを言う。
誕生と死滅のルールは次のようになる。

生き物が生息していないセルにおいて、隣接する生き物の数が
ai (1 ≤ i ≤ M1 ) 匹であるような
i がある場合、そのセルに生き物が誕生する。

生き物が生息しているセルにおいて、隣接する生き物の数が
bj (1 ≤ j ≤ M2 ) 匹であるような
j がない場合、そのセルの生き物は死滅する。

今回購入した飼育箱はセルの数が5*5*5である立方体の飼育箱だ。
この飼育箱ではこの生き物はどのような振る舞いをするのだろうか…？　とても楽しみである。

〜数日後〜

とりあえず、飼育してみたが…

毎日観察するなんて時間がかかるし、僕にはめんどくさくてやる気がおきない。

そうだ、コンピューターとプログラムを使ってシミュレートしよう。

Input

入力は複数のデータセットからなる。
各データセットは以下のフォーマットで与えられる。

N
(z = 0 の飼育箱の状態)
(空行)
(z = 1 の飼育箱の状態)
(空行)
(z = 2 の飼育箱の状態)
(空行)
(z = 3 の飼育箱の状態)
(空行)
(z = 4 の飼育箱の状態)
(空行)
M1 a1 a2 …　aM1
M2 b1 b2 …　bM2

最初にシミュレートする日数 N が与えられる。

次に飼育箱の初期状態の情報が与えられる。これは5つの5*5の2次元グリッドで与えられる。

各2次元グリッドは0と1から成り立ち、1は生き物がいることを示し、0は何もいないことを示す。

例えば、 z = 0のセルの状態の2次元グリッドの4行2列目の値が1だった場合、飼育箱の座標(1, 3, 0)の位置に生き物がいることを表す。

次に、整数 M1 が与えられ、そのあとに M1 個の数字 ai が与えられる。

次に、整数 M2 が与えられ、そのあとに M2 個の数字 bj が与えられる。

入力の終わりは N = 0で表される。

Constraints

入力は以下の条件を満たす。

1 ≤ N ≤ 100

0 ≤ M1 , M2 ≤ 27

0 ≤ ai , bj ≤ 26
(1 ≤ i ≤ M1 , 1 ≤ j ≤ M2 )

任意の i , j (1 ≤ i < j ≤ M1 )
において、 ai ≠ aj

任意の i , j (1 ≤ i < j ≤ M2 )
において、 bi ≠ bj

Output

各データセットに対し、 N 日経過後の状態を出力せよ。

出力は以下のフォーマットに従う。

Case (テストケースの番号):
(z = 0 の飼育箱の状態)
(空行)
(z = 1 の飼育箱の状態)
(空行)
(z = 2 の飼育箱の状態)
(空行)
(z = 3 の飼育箱の状態)
(空行)
(z = 4 の飼育箱の状態)

1行目にテストケース番号を出力し、次の行から N 日経過後の状態として、5*5の2次元グリッドを5つ出力せよ。

各テストケースの出力間には空行を出力しなさい。

Sample Input

5
00000
01010
00000
00100
00000

00000
01010
00000
01010
00000

00000
00100
00000
01010
00000

00000
01010
00000
00100
00000

00000
00000
00100
00000
00000

1 2
2 3 4
4
01110
00100
00100
00100
01110

01110
10001
10000
10001
01110

11111
10001
11111
10000
10000

01110
10001
10000
10001
01110

00000
00000
00000
00000
00000

2 3 4
1 2
100
00100
01010
01110
10001
10001

01110
00100
00100
00100
01110

00000
00000
00000
00000
00000

11111
00010
00100
01000
11111

10001
10001
10001
10001
01110

5 1 3 5 7 9
5 0 2 4 6 8
0

Sample Output

Case 1:
00000
00000
01010
01110
10101

00000
10001
00000
00000
00000

00000
00000
11111
10001
00000

00000
00000
00000
00000
01010

00000
00000
01110
00100
11111

Case 2:
00010
10110
00000
11000
10000

00001
00000
10101
00010
00100

10001
00000
00000
00000
00010

01110
10001
00000
00001
10000

00000
00000
00111
01001
01000

Case 3:
00000
00000
00000
00000
00000

00000
00000
00000
00000
00000

00000
00000
00000
00000
00000

00000
00000
00000
00000
00000

00000
00000
00000
00000
00000
Problem C: General of Taiko

Problem

とあるゲームセンターには、曲に合わせて流れてくる譜面通りに和太鼓を叩くゲームがあります。
譜面は長さ L のセルからなり、各セルには何もない、またはノートと呼ばれるプレイヤーがとるべき行動を表した記号があります。
ノートは2種類ありそれぞれ、和太鼓の面を叩く「トン」、和太鼓の縁を叩く「コツ」があります。
これらのノートに合わせて和太鼓を叩くと得点を得ることができます。
この得点の合計が10000点以上であればクリアとなります。

このとき、プレイヤーが曲をクリアできる確率を求めなさい。ただし、プレイヤーは常に最適な行動をとることにします。

プレイヤーが譜面通りに和太鼓を叩く精度は11段階あり、それぞれ、
0%, 10%, 20%, ..., 90%, 100%の確率で譜面通りに和太鼓を叩くことができます。

上記の二種類の動作は右腕と左腕どちらででも行うことができます。
プレイヤーの情報として、それぞれの腕で行った場合の精度の安定率を表す値が16種類、下記のように与えられます。

lt_lt lt_rt lt_lk lt_rk
rt_lt rt_rt rt_lk rt_rk
lk_lt lk_rt lk_lk lk_rk
rk_lt rk_rt rk_lk rk_rk

ただし、 lt は左腕でトン, rt は右腕でトン, lk は左腕でコツ, rk は右腕でコツの動作を表します。
例えば、 lt_rk は左腕でトンのあとに右腕でコツを行った時の精度の安定の度合いを表し、この値によって左腕でトンのあとに右腕でコツを行うときの精度が、下記のように変化します。

プレイヤーの精度 = max(0, (精度の安定率 - 10) * 10 + 一つ前の精度) (%)

曲の情報は以下のとおりです。
曲の長さを表す L 、譜面を表す L 個の数字 si (0 ≤ i < L )で示される。譜面の先頭は s0 である。
si の値は以下の3つです。

0 ... ノートなし
1 ... トン
2 ... コツ

プレイヤーが最初に和太鼓を叩くときの精度は100%です。
また、プレイヤーは譜面を無視することができます。
ノートがなかったり、ノートを無視した場合、プレイヤーの精度は100%になります。

各ノートに合わせて和太鼓を叩いたときの得点は下記のようになります。

得点 = A + B * min(コンボ数, 10)

この問題におけるコンボ数とは、連続してノートに合わせて和太鼓を叩けた数です。
プレイヤーがノートに合わせて叩いた場合、上記の式を元に得点が入り、その後にコンボ数が1増えます。
ノートに合わせて和太鼓を叩けなかった場合、コンボが途切れ、コンボ数が0になります。

Input

入力は複数のデータセットからなります。
各データセットは以下のとおりです。

lt_lt lt_rt lt_lk lt_rk
rt_lt rt_rt rt_lk rt_rk
lk_lt lk_rt lk_lk lk_rk
rk_lt rk_rt rk_lk rk_rk
L
s0 s1 s2 … sL - 1
A B

入力の終わりは負の整数4つからなります。

Constraints

入力は以下の条件を満たします。

0 < L ≤ 100

0 ≤ 精度の安定率 ≤ 10

精度の安定率は整数

0 < A , B ≤ 10000

A と B はともに100の倍数

データセットの数は100個以下

Output

各入力に対して、クリアできる確率を1行で出力しなさい。
ただし、出力は0.001以下の誤差を含んでも良いです。

Sample Input

9 0 0 0
0 9 0 0
0 0 0 0
0 0 0 0
5
1 1 1 1 1
1000 500
10 10 10 10
10 10 10 10
10 10 10 10
10 10 10 10
5
1 0 2 0 1
1000 2000
3 8 6 10
0 1 6 8
10 2 4 7
8 6 6 8
19
2 2 0 2 2 0 2 1 0 1 2 0 1 2 0 1 0 2 2
200 100
-1 -1 -1 -1

Sample Output

0.3024000000
0.0000000000
0.5120000000
Problem D: Smartphone Game

Problem

人気のスマフォゲームの一機能を実装してみよう。ゲームは以下の仕様に基づく。

5*5のマスに、5種類のブロックが設置されている。

それぞれの種類のブロックには得点が設定されている。

得点には、ブロックの得点の他に、ボーナス得点が設定されている。最初のボーナス得点は1である。

ブロックを任意に1つだけ決めて、最大で n 回まで上下左右に移動できる。移動先のブロックは移動元のブロックのあった場所に移動する。つまり、隣接したブロックを交換する事になる。

移動した後、同じ種類のブロックが縦3個以上又は横3個以上に並んだ場合、並んだブロックは全て消える。

消えるべきブロックが全て消えた後、あるブロックの下に別のブロックが存在しない場合、そのブロックは落下する。落下とは、あるブロックの１つ上に辿り着くまで下に移動する事をいう。ブロックが下に存在しない場合は一番下に移動する。

全てのブロックの落下後にボーナス得点が1だけ加算される。

その後にブロックが並んだ場合、さらに消え、落下する。

ブロックが消える時に、ブロック１つにつき「ブロックの得点*ボーナス得点」が自分の得点に加算される。

１回のプレイで得られる最大の点数を求めよ。

Input

入力は複数のデータセットからなる。

各データセットは以下で表される。

n
a11 .. a15
.
.
a51 .. a55
score1 .. score5

aijは1から5までの数字で、ブロックの種類を表す。

scoreiは i 種類目のブロック１つ分の得点を表す。

n = -1 の時、入力が終了する。

Constraints

入力は以下の条件を満たす。

0 ≤ n ≤ 5

1 ≤ aij ≤ 5

0 ≤ scorei ≤ 100

テストケースの数は 10 を超えない。

入力に含まれる値は全て整数である。

Output

各データセット毎に、答えを一行に出力しなさい。

Sample Input

0
1 1 1 5 5
5 5 5 5 5
5 5 1 5 5
5 1 1 1 5
5 5 5 5 5
0 0 0 0 1
2
1 2 3 4 5
2 3 4 5 5
2 3 4 5 5
3 4 5 5 1
5 4 3 2 1
100 99 98 97 96
5
1 2 3 4 5
2 3 4 5 1
1 2 3 4 5
5 4 3 2 1
1 2 3 4 5
99 79 31 23 56
-1

Sample Output

17
2040
926
Problem E: Doragoso Ball

Problem

L 個集めるとドラゴソが現れどんな願いでも一つだけ叶えてくれるというドラゴソボールがとある迷宮に散らばっている。入口からスタートし、途中で立ち止まることなくすべてのボールを回収し、それらを迷宮内にある祭壇に奉納し、そのまま呪文を唱えるとドラゴソが現れ願いを叶えてくれるという。ただし、呪文を唱え始める時間は入口からボールを奉納するまでのルートのうち、移動時間が K 番目に短いルートで移動したときの時間でなければならない。

この迷宮は部屋とわたり通路からなり、部屋と部屋はわたり通路を通る事によって行き来できる。ドラゴソボールはそれらの数ある部屋のどこかに落ちている。なお、迷宮は入り口から祭壇へたどりつく道が存在しない可能性もあるようだ。また、移動時間はわたり通路の移動だけを考慮し、部屋の中を移動する時間、ボールを拾うときにかかる時間、祭壇に奉納する時間は考慮しなくてよい。また、同じ通路や同じ部屋に何度も訪れてもよいが、ドラゴソボールがある部屋に初めて入った場合は、そのボールを拾うことにする。祭壇に到達したとき、必ずしもボールを納めなければならないわけではない。

迷宮の内部構造の情報と迷宮の入り口、祭壇の場所とボールの数 L とボールの配置場所と求められている最短な経路の順位 K が与えられるので、呪文を唱え始めるべき時間を求めよ。

また、異なる移動ルートでも、移動時間が同じである場合はそれらのルートは同じ順位として扱う。

例えば、

ルートA 時間 2
ルートB 時間 5
ルートC 時間 5
ルートD 時間 5
ルートE 時間 5
ルートF 時間 7

このようなとき、ルートB,C,D,Eは2位かつ3位かつ4位かつ5位として扱う。ルートFは6位として扱う。

Input

入力は複数のデータセットからなる。

各データセットは以下のフォーマットで表される。

N M L K
u1 v1 c1
…
uM vM cM
S G
B1
B2
…
BL

最初に N , M , L , K が与えられる。

それぞれ、部屋の数、わたり通路の数、ボールの数、求められている最短な経路の順位を表す。それぞれの部屋は1〜 N で番号付けされる。

次に M 行にわたり通路の情報、 ui , vi , ci が与えられる。

部屋 ui , vi 間にわたり通路が存在し、通過するのに時間 ci がかかることを表す。

次に S , G が与えられる。

それぞれ、迷宮の入り口と祭壇がある部屋番号を表す。

次に L 行にわたってドラゴソボールが落ちている部屋の番号 Bi ( 1 ≤ i ≤ L )が与えられる。

入力の終わりは4つのゼロからなる。

Constraints

入力は以下の条件を満たす。

入力に含まれる値はすべて整数

2 ≤ N ≤ 50

0 ≤ M ≤ 1225

1 ≤ L ≤ 7

1 ≤ K ≤ 10

1 ≤ S , G ≤ N

1 ≤ Bi ≤ N ( 1 ≤ i ≤ L )

Bi ≠ Bj ( 1 ≤ i < j ≤ L )

1 ≤ ui , vi ≤ N ( 1 ≤ i ≤ M )

1 ≤ ci ≤ 1000 ( 1 ≤ i ≤ M )

データセットは最大10個である

Output

各データセットに対し、呪文を唱え始めるべき時間を1行に出力せよ。 K 番目に短い経路が存在しない場合は"NA"を1行に出力せよ。

Sample Input

9 14 5 10
1 2 1
1 4 5
2 4 4
2 3 3
2 6 2
3 6 3
3 7 2
4 6 5
4 5 6
5 8 8
6 7 3
7 8 1
7 9 9
8 9 2
1 9
1
2
5
7
9
4 5 1 3
1 2 1
1 3 2
2 3 2
2 4 9
3 4 1
1 4
2
4 5 1 10
1 2 1
1 3 2
2 3 2
2 4 9
3 4 1
1 4
2
4 3 1 1
1 2 1
2 3 1
3 4 1
1 4
1
4 3 1 2
1 2 1
2 3 1
3 4 1
1 4
1
4 3 1 10
1 2 1
2 3 1
3 4 1
1 4
1
2 1 1 1
1 2 1
1 2
1
2 1 1 10
1 2 1
1 2
1
4 2 1 4
1 2 1
3 4 1
1 4
2
0 0 0 0

Sample Output

27
6
8
3
5
7
1
19
NA
Problem F: Ballon Contest

Problem

空の様子がいつもと違う。色とりどりの多彩な熱気球が空を覆っていた。今日は熱気球の大会だ。熱気球から落とされた得点付きボールを参加者全員で取り合うらしい。せっかくなので優勝者を予想してみることにした。

レクリエーションにはN人参加する。

N 人の参加者はそれぞれ自分の位置が与えられる。複数の参加者に同じ位置が与えられる事はない。

上空の熱気球からM個のボールが１個ずつ落下する。

参加者は全員同じタイミングで走り始め、ボールに向かって同じ速度で一直線に走る。

ボールの落下位置に一番早く辿り着けた人がボールを取得できる。同時に複数人辿り着いた場合は、一様な確率で取得できる人が決まる。

参加者がボールを取得すると参加者全員が元の位置に戻る。

参加者が走り始めてから参加者の全員が元の位置に戻るまでに別のボールが落下する事はない。

各ボールには得点と落下する位置が与えられ、ボールを取得すると得点を得られる。

ボールは落下中に空気抵抗を受けるため、実際に落下する地点にはズレが発生する。落下予定の位置より最大でX軸方向に±dx 、Y軸方向に±dy だけ一様な確率でズレる。

得られる得点の期待値を求め、期待値の最も大きい参加者の期待値を出力せよ。

Input

入力は複数のデータセットからなる。

各データセットは以下で表される。

N M
x1 y1
.
.
xN yN
bx1 by1 dx1 dy1 score1
.
.
bxM byM dxM dyM scoreM

1行目には、参加者の人数 N 、ボールの数 M が与えられる。

2行目から N +1行目までには、参加者の情報が与えられる。 xi , yi は、それぞれ参加者の位置のX座標・Y座標である。

N +2行目から N + M +1行目までには、ボールの情報が与えられる。各ボールが実際に落下する地点のX座標・Y座標はそれぞれ bxj - dxj から bxj + dxj まで、 byj - dyj から byj + dyj までの範囲のどこかである。 scorej はボールの得点である。

入力の終わりは2つのゼロからなる。

Constraints

入力は以下の条件を満たす。

1 ≤ N ≤ 100

1 ≤ M ≤ 10

0 ≤ xi , yi , bxj , byj ≤ 10000

1 ≤ dxj , dyj≤ 10000

1 ≤ scorej ≤ 100

テストケースの数は 10 を超えない。

入力に含まれる値は全て整数である。

Output

各データセット毎に、答えを一行に出力しなさい。

出力は0.0001以下の誤差を含んでもよい。

Sample Input

3 4
10 75
50 5
90 75
50 50 10 10 2
40 90 1 1 3
10 20 10 15 1
50 70 50 50 4
4 2
25 25
25 75
75 75
75 25
50 50 10 10 1
50 50 15 15 2
1 1
5 5
1 1 1 1 1
0 0

Sample Output

5.442857
0.750000
1.000000
Problem G: The Humans Braving the Invaders

Problem

現在、地球は宇宙からの侵略者であるインベーダーの攻撃を受け、人類で生き残った者は基地にいる我々だけとなった。
奴らに対抗できる戦力もほとんど残されていない。
だが、ここで我々は諦めるということはしない。
インベーダを全滅させることが、我々人類が生き残る最後の手段である。

今から最後になるであろう作戦の内容を説明する。

まず、インベーダーの戦力に比べ我々の戦力はあまりにも少ないので、この基地に立てこもり、籠城戦を行う。
この基地は高い山に囲まれていて、インベーダーが侵攻するには基地正面にある真っ直ぐな道を通る他無い。
この道をフィールドと呼ぶことにする。この特徴により、前方に集中してインベーダーを攻撃することが可能である。
基地にいる我々はインベーダーに対し2種類の武器で攻撃を行う。
1つはインベーダー1体を狙撃するスナイパーライフルである。もう1つは広範囲に攻撃ができるグレネードランチャーである。

人類でたった1人のプログラマーである君の仕事は、インベーダーと我々の行動記録を元に戦闘をシミュレーションすることだ。
行動記録はクエリー形式で与えられる。各クエリーは1つまたは複数の整数からなり、次のように与えられる。

0
インベーダーがフィールド上の、基地からの距離 L の位置に出現する。

1 d
現在フィールド上にいるすべてのインベーダーが d だけ基地に近づく。
この動作の後、基地に到達したインベーダーからダメージを受け、また、それらの敵はフィールド上から消滅する。
ダメージを受けた場合は"damage (この時基地に到達したインベーダーの数)"を1行に出力する。

2 k
現在フィールド上にいるインベーダーの数が k 体以上の場合、基地に近い方から k 番目のインベーダーをスナイパーライフルで攻撃する。
そのインベーダーはフィールド上から消滅する。そして"hit"を1行に出力する。
フィールド上のインベーダーの数が k 体未満の場合、"miss"を1行に出力する。

3 x r
基地からの距離が x の位置に範囲 r のグレネードランチャーで攻撃する。基地からの距離が x の位置に着弾し、そこからの距離が r 以下の位置にいるすべてのインベーダーはフィールド上から消滅する。
そして"bomb (倒したインベーダーの数)"を1行に出力する。補足として、基地はグレネードランチャーのダメージを受けることはない。

4 k
フィールド上のインベーダーの数が k 体以上の場合、"distance (基地に近い方からk番目のインベーダーと基地との距離)"を1行に出力する。
フィールド上のインベーダーの数が k 体未満の場合、"distance -1"を1行に出力する。

作戦の説明は以上だ。総員、作戦開始！・・・幸運を祈る。

Input

入力は複数のデータセットからなる。
各データセットは以下で表される。
1行目は2つの整数 Q , L がスペース区切りで与えられる。
続く Q 行には、上記で説明したクエリーが Q 個与えられる。
入力の終わりは2つのゼロからなる。

Constraints

入力は以下の条件を満たす。

入力に含まれる値はすべて整数

1 ≤ Q ≤ 100000

1 ≤ L ≤ 109

1 ≤ d , k ≤ 109

0 ≤ x ≤ L

0 ≤ r ≤ 109

同じ位置にインベーダーが2体以上存在することはない

データセットの数は3個以下

Output

各データセットにつき、出力の指示があるクエリーに対して出力せよ。各データセットの最後には"end"を出力せよ。

Sample Input

18 10
0
4 1
1 1
4 1
0
1 1
0
2 2
1 10
0
1 1
0
1 1
0
1 5
3 4 0
3 4 1
0
9 10
4 1
2 2
3 5 5
0
4 1
2 2
3 5 5
0
2 1
0 0

Sample Output

distance 10
distance 9
hit
damage 2
bomb 1
bomb 2
end
distance -1
miss
bomb 0
distance 10
miss
bomb 1
hit
end
Problem A: Nasty Boys

Problem

太郎君は学校のロッカーに大事な本を隠しているので他の人よりとても厳重に管理していて、学校で支給された鍵に加えて以下のようなボタン認証式の鍵を設置しています。

ただパスワードを忘れやすい太郎くんはパスワードを一筆書きで書けるものにしてしまう癖があります。更に詰めの甘い太郎君は自分のパスワードを考えるときに候補を紙に書いていました。その紙をたまたま拾ったは次郎君は、性格が悪いので捨てずにロッカーを開けることに挑戦しました。

しかし紙にはなんと1000個ものパスワードの案が書かれており、全ての入力を試すと日が暮れてしまいそうです。
そこで太郎君の癖を知っている次郎君は、調べる回数を減らすために1000個のパスワードの中から一筆書きできるものだけを取り上げることにして、その作業をプログラマーの貴方に頼むことにしました。

1つのデータセットにつき必ず候補は一つ以上存在します。一筆書きのルールを以下に示します。

同じ文字は連続しない。例えばAAAは許されない。

上下左右4方向に一筆書きが可能。斜め方向に移動しない。

ボタン配列の枠外に出て連続することはない。例えばABCAのような移動は許されない。

一度通った文字の上も何度も通過可能。

ボタン1文字のみの入力も一筆書きとみなす。

Input

入力は以下のように1000個の文字列群からなり、各行はAからIまでの1文字以上10文字以下の大文字のアルファベット列である。それぞれ文字列のデータの重複はないものとする。

string1
string2
...
string1000

Output

入力のうち候補となるパスワード（candidatePassword）のみ抜き出して以下のように列挙せよ。なお以下の場合はN個の候補が挙げられている。

candidatePassword1
candidatePassword2
...
candidatePasswordN

出力は入力の文字列の順と同じであり順番を入れ替えてはならない。

Sample Input

ABCFI
ABCABCABC
AEI
EFC
（中略）
DEHED
EEEEE
（以上でちょうど1000個）

Sample Output

ABCFI
EFC
（中略）
DEHED
Problem B: Matrix Operations

Problem

要素が1と0からなるn×nの行列に対して、以下の種類の操作を行うプログラムを作成せよ。

部分行列と角度(0,90,180,270,360)が与えられるのでその分だけ時計回りに回転させる。

部分行列が与えられるので値を反転させる。

行が与えられるので左に1個シフトし、はみ出た分は右端に移動する。

行が与えられるので右に１個シフトし、はみ出た分は左端に移動する。

行(r),列(c)が与えられる。

Step1：現在のセルを(r,c)にする。

Step2：現在のセルの値を反転する。

Step3：隣接するセルのうち、値が現在のセルの反転前の値と等しいセルに対し、Step2とStep3の処理を行う。

ここで、セル(i,j)に隣接するセルとは、(i-1,j),
(i+1,j),(i,j-1),(i,j+1)の４つである。

Input

n m
a1,1 a1,2 ... a1,n
a2,1 a2,2 ... a2,n
:
an,1 an,2 ... an,n
Operation1
Operation2
:
Operationm

入力の最初に2つの整数nとmが空白区切りで与えられる。 nは行列のサイズ、mは操作の数を表している。

次にグリッドの情報がn行で与えられ、グリッドの情報のi行目にはn個の整数
ai,jが空白区切りで与えられる。ai,jには0か1が与えられる。

次に1行で表される各Operationiがm個与えられる。
Operationi の最初の入力はo(操作の種類)が入力される。

oが0のときは回転(Rotate)を表している。
続く入力は、r c size angle(行、列、サイズ、角度) が空白区切りで与えられる。
左上(r,c)から右下(r+size-1,c+size-1)が部分行列となる。
正方行列になることは保証されている。

oが1のときは反転(Reversal)を表している。
また、続く入力は、r c size (行、列、サイズ) が空白区切りで与えられる。
左上(r,c)から右下(r+size-1,c+size-1)が部分行列となる。
正方行列になることは保証されている。

oが2のときは左シフト(Left shift)を表している。
また、続く入力は r(行) が与えられる。

oが3のときは右シフト(Right shift)を表している。
また、続く入力は r(行) が与えられる。

oが4のときは島反転(Island reversal)を表している。
また、続く入力は r c(行、列) が空白区切りで与えられる。

Constraints

入力は以下の条件を満たす。

1 ≤ n,r,c,size ≤ 15

1 ≤ m ≤ 100

0 ≤ o ≤ 4

1 ≤ r+size-1,c+size-1 ≤ 15

0 ≤ angle ≤ 360

Output

生成された行列を出力して下さい。

Sample Input 1

3 1
1 1 0
0 1 1
1 0 1
0 2 2 2 90

Sample Output 1

1 1 0
0 0 1
1 1 1

Sample Input 2

5 2
0 0 0 0 0
1 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
3 2
4 2 2

Sample Output 2

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Sample Input 3

5 2
1 1 1 0 1
1 0 0 0 0
0 0 0 1 1
0 1 0 0 0
0 1 1 1 0
1 3 3 3
0 1 1 5 90

Sample Output 3

0 0 0 1 1
1 1 0 0 1
0 1 1 0 1
0 1 0 0 0
1 1 0 0 1
Problem C: Last One

Problem

あなたは、集合好きな友人Aと一風変わったゲームをしてみる事にした。

n個の要素からなる重複が許される非負の整数の集合Sが与えられる。集合Sに含まれる各要素は非負のpi進数である。集合Sに対して
以下のStep1~3を1つのターンとして、あなたと相手の二人が交互にターンを繰り返す。各ターンではこの番号の順に操作を行う。

Step 1: 集合Sに含まれる全ての要素を一度取り除き、その取り除いた各要素を2進数に変換して、0を消して1が1つ以上連続する部分に分割し、その分割された部分を全て集合Sに加える。

Step 2: このとき集合Sが空になっていたならば、現在このターンをプレイしているプレイヤーは負ける。

Step 3: 集合Sに含まれる要素aを1つ選び、そのaから 1 ≤ x ≤ a を満たす任意の整数xを引く。

下の図は次の入力が与えられたときの最初の1ターンの進行の仕方のうちの1つの例である。

4
10 3
2 11
16 5
16 AE

最初はあなたのターンだ。与えられた入力に対して両者が最善を尽くすとき、果たしてあなたに勝ち目はあるのだろうか。

Input

入力は次の形式で与えられる。

n
p1 m1
p2 m2
...
pi mi
...
pn mn

集合の要素であるpi進数miがn個与えられる。集合の要素の数nは105を超えない。また、2≦pi≦62を満たす。
pi進数miは通常の数字である0~9に加え、アルファベット52文字を使用する。
その順番は012...789ABC...XYZabc...xyzを昇順とし、i番目までの文字を使うものとする。また、pi進数miは10進数で218-1を超えない.

Output

与えられた入力に対しあなたが勝てるならwin、負けるならloseを出力せよ。

Sample Input 1

1
10 1

Sample Output 1

win

Sample Input 2

2
10 1
10 1

Sample Output 2

lose

Sample Input 3

3
25 53AI
43 3BI0
62 pn6

Sample Output 3

win
Problem D: Room of Time and Spirit

Problem

20XX年、とある科学者がバイオテクノロジーによって強力な人造人間を開発してしまった。この人造人間はコンピュータにより、戦闘の達人たちの細胞を組み合わせて作られているため非常に強力である。

このままでは地球は人造人間に支配されてしまうので、 N 人の戦士たちは人造人間と戦うことにした。しかし今の戦士たちでは到底人造人間に敵わないため、修行をしなければならない。また、N 人の戦士たちはそれぞれ 1 ~ N の番号が付いている。

この時代、天空都市AIZUには SRLU室と呼ばれる修行のための特殊な部屋が存在した。この部屋での1年は外界の時間の1日と同じであるため、短期間で戦闘力を大幅に上昇することが出来る。同時に部屋に入れる人数の上限は2人である。また、その2人が部屋に入った時、それぞれ戦闘力が上昇する。

戦士たちは残された時間でどのように部屋に入るか検討するため、あなたに以下のクエリを処理するプログラムの作成を依頼した。

与えられるクエリは以下の通りである。

また以下の説明で出てくる A, B はそれぞれ戦士の番号を表す。A と B が等しい事は無い。

IN A B C

A と B が部屋に入り、それぞれ C だけ戦闘力が上昇する。この時、(部屋に入る直前の B の戦闘力) - (部屋に入る直前の A の戦闘力) = C が成り立つ。また、この時 B の戦闘力は A の戦闘力より高い事が保証される。

COMPARE A B

A と B の戦闘力の差 (現在の B の戦闘力) - (現在の A の戦闘力)を出力する。もしその差が特定出来なければ、WARNING と出力せよ。

Input

N Q
query1
.
.
.
queryQ

最初に戦士の人数 N , クエリの数 Q が与えられる。

次に Q 回だけクエリが与えられる。

Constraints

入力は以下の条件を満たす。

2 ≤ N ≤ 100000

1 ≤ Q ≤ 100000

1 ≤ A, B ≤ N

1 ≤ C ≤ 5000

Output

上記のように与えられたクエリを順番に処理していき、 COMPAREの入力が与えられた際に出力を行う。

Sample Input1

3 5
COMPARE 1 2
IN 1 2 5
IN 2 3 3
COMPARE 2 3
COMPARE 1 3

Sample Output1

WARNING
3
11

Sample Input2

4 3
IN 1 4 10
IN 2 3 20
COMPARE 1 2

Sample Output2

WARNING

Sample Input3

3 4
IN 2 1 2
IN 3 1 2
COMPARE 1 3
COMPARE 2 3

Sample Output3

-2
2

Sample Input4

10 4
IN 10 8 2328
IN 8 4 3765
IN 3 8 574
COMPARE 4 8

Sample Output4

-3191

Sample Input5

3 5
IN 1 2 5
IN 1 2 5
IN 2 3 10
COMPARE 1 2
COMPARE 2 3

Sample Output5

15
10
Problem E: Light Source

Problem

二次元平面上にn個の円状の光源が配置されている。ある光源が光を受けると、下図のようにその光源の中心点から扇状に光が放出される。

光源の中心点は(x,y)、半径はrで表される。
光となる扇形は角βを中心に-θ/2, +θ/2の方向へ対称に広がり、その半径はαである。

光源の円が扇型の光に完全に覆われるとき、光源はその光を受けたとみなされる。光源から放出される光の強さは、受けた光の強さの合計となる。ただし、放出される光の強さには上限があり、上限を超えた場合、光の強さは上限値と同じになる。なお、ある光や光源によって光が遮られることはない。

ある地点に存在する光源を目的光源とする。目的光源では光が放出されず、受ける光の強さに制限はない。
あなたは座標(0,0)から、ある強さの扇形の光を、任意の方向に１度だけ放出することができる。目的光源が受ける光の強さの合計の最大値を求めるプログラムを作成せよ。ただし、全ての光源において、放出された光が元の光源に戻るような入力データは与えられないと仮定してよい。また、この問題では、領域の境界からの距離が0.000001以内の場合、領域上とみなすことにする。

Input

n
θ0 α0 power
x1 y1 r1 θ1 α1 β1 maxpower1
.
.
xn yn rn θn αn βn maxpowern
xn+1 yn+1 rn+1

1行目には目的光源を除く光源の数nが与えられる。

2行目に最初に光を放出する座標(0,0)の情報、3行目からn+2行目に目的でない光源の情報、n+3行目に目的光源の情報がそれぞれ空白区切りで与えられる。

各情報に対して、xi,yiは光源の中心点の座標、riは光源の半径、θiは光が広がる角度、αiは光の半径、βiは光が向かう方向を表す。2行目のpowerは最初に放出される光の強さ、3行目からn+2行目のmaxpoweriは放出される光の上限を表す。

光の方向βiはx軸の正の向きから反時計回りに回転し、各角度の単位は度とする。

Constraints

入力は以下の条件を満たす。

入力は全て整数からなる

1 ≤ n ≤ 100

-1000 ≤ xi,yi ≤ 1000

1 ≤ ri ≤ 1000

1 ≤ θi ≤ 180

1 ≤ αi ≤ 1000

0 ≤ βi < 360

0 ≤ power,maxpoweri ≤ 1000

Output

目的光源を全て囲うような光の強さの合計の最大値を1行に出力せよ。

Sample Input 1

1
90 10 20
3 3 1 90 10 315 10
6 0 1

Sample Output 1

30

Sample Input 2

2
90 10 10
-3 0 1 45 10 90 10
-6 0 2 30 3 180 10
-9 0 1

Sample Output 2

10
Problem F: Prize Game

Problem

新しいゲームセンターが開店することになった。たくさんのお客さんを取り入れるために、全く新しいプライズゲームを設置することになった。

このプライズゲームはR×Cのグリッドから構成される。各マスは空白か、1〜18のいずれかの数字が書かれている。プレイヤーはひとつの空白のマスを選択し、そのマスの景品を獲得できる。ただし、マスにある景品はプレイヤーから見ることができない。

スタッフはこのプライズゲームに景品を設置しなければならない。スタッフは以下のルールが守られていれば、どのように景品を配置してもよい。数字が書かれているマスについて、その数字をxとすると、その数字を中心とする凸型の範囲の中に景品がちょうどx個置かれている必要がある（下の図を参照）。この凸型の出っ張っている部分は上を向いている。また、景品は空白のマスのみに置くことができ、1つのマスに3個まで置くことが出来る。1個も置かないことも可能である。

中央の数字が5だった場合の景品の置き方の例。オレンジ色の部分にちょうど計5個の景品が置かれている必要がある。

お客さんに景品の場所が簡単に推測されては大損である。そこで、オープニングスタッフであるあなたに、上記ルールに則った景品の置き方の場合の数を数えてもらいたい。ただし、景品は互いに区別できないものとする。答えは大きくなる場合があるので答えの場合の数を1000000007で割った余りを答えなさい。

Input

R C
a1,1 a1,2 ... a1,C
a2,1 a2,2 ... a2,C
:
aR,1 aR,2 ... aR,C

1行目に2つの整数R,Cが空白区切りで与えられる。それぞれグリッドの行数と列数を表す。次にプライズゲームを表すグリッドの情報がR行で与えられる。グリッドの情報のi行目にはC個の整数 ai,jが空白区切りで与えられる。ai,jはグリッドのi行j列のマス情報を表す。0の場合は空白のマス、それ以外の場合は数字ai,jが書かれたマスを表す。また、与えられるグリッドは1行目がプライズゲームの一番上を表し、R行目が一番下を表す。

Constraints

入力は以下の条件を満たす。

1 ≤ R,C ≤ 6

0 ≤ ai,j ≤ 18 (1 ≤ i ≤ R , 1 ≤ j ≤ C)

Output

ルールに則った景品の置き方の場合の数を1000000007で割った余りを1行に出力せよ。

Sample Input 1

3 3
0 0 0
0 18 0
0 0 0

Sample Output 1

16

Sample Input 2

3 3
0 0 0
0 2 0
0 0 0

Sample Output 2

336

Sample Input 3

3 3
0 1 0
1 0 0
0 1 1

Sample Output 3

1

Sample Input 4

1 1
1

Sample Output 4

0

Sample Input 5

6 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

Sample Output 5

80065005
Planarian Regeneration

Problem

皆さん、「プラナリア」って知っていますか？

プラナリアとは、日本では川の上流の石や枯葉などの裏に張り付いて生息している水生生物です。

プラナリアの最も優れた能力はその「再生能力」です。プラナリアの再生能力は著しく、例えば、三等分するとそれぞれが再生し、数週間後には元の完全な状態のプラナリアが3匹できあがります。

この度、会津の山奥の上流にて発見された新種のプラナリアの姿は長方形をしていて、プラナリアはある法則により再生します。
このとき、プラナリアは下の図のように配置し、２つの手段でプラナリアの切断実験を行います。

まず１つ目の手段として、垂直方向に切ることを考えます。一度の切断では、すべての断片を水平方向の長さが(断片の頭に近い部分):(断片の頭に遠い部分)=m :n になるように切断します。この動作をx 回繰り返します。

次に２つ目の手段として、水平方向に切ることを考えます。一度の切断では、すべての断片を垂直方向の長さが(断片の右端に近い部分):(断片の左端に近い部分)=k :l に切断します。この動作をy 回繰り返します。これらの切断によって断片が移動することはありません。

数週間後に、各断片が元の完全なプラナリアの状態に再生している確率は以下の式により求まります。

上の図は、垂直方向に1:2で2回、水平方向に1:1で1回切断した状態です。

以上の操作で切断した時の、数週間後に元の姿に再生しているプラナリアの数の期待値を求めてください。元のプラナリアの垂直方向の長さと水平方向の長さはともに1とします。

Input

m n x
k l y

入力では、6つの整数m , n , x , k , l , y が上記の入力フォーマットで与えられます。

これら6つの整数は問題文中のものと対応しており、水平方向にm :n で切断する動作をx 回、垂直方向にk :l で切断する動作をy 回繰り返します。

1 ≤ m , n , k , l ≤ 100、 0 ≤ x , y ≤ 40 であり、 m , n と l , k はそれぞれ互いに素です。

Output

一行に数週間後に元の姿に再生しているプラナリアの数の期待値を出力してください。

出力は 10-6 以下の誤差ならば許容されます。

Sample Input 1

1 1 1
1 1 1

Sample Output 1

0.562500

Sample Input 2

1 2 2
1 1 1

Sample Output 2

0.490741

Sample Input 3

1 2 0
3 4 0

Sample Output 3

1.000000

Notes

この問題では、doubleよりも精度の高い浮動小数を使用することを推奨します。
Problem H: Cone Cut

Problem

この問題では3次元空間上のある点X とある点Y を通るような直線を直線XY と書く。

3次元空間上に円錐とその円錐内部の点P が与えられる。点P を通り円錐の底面に垂直な直線と円錐の底面との交点を点Q とする。この時、円錐の底面の中心をO とし、直線OQ と円錐の底面の円周との交点を、点Q に近い方から点A 、点B とする(ただし、点O と点Q が同一点のときは、点O を通る任意の直線と円錐の底面の円周との交点を点A 、点B とする。)。また、円錐の底面を含むような平面において、点O を通り、直線AB と垂直に交わる直線と円錐の底面の円周との交点を点C 、点D とする(ただし、点C と点D は入れ替えても問題ない)。

以下の図は、円錐の頂点方向から見た円錐の底面の図である。

直線AP と直線BP の円錐との交点（直線AP の場合、点A でない方の交点を指す。直線BP も同様。）を点A' 、点B' とし、点A' と点B' を通り直線CD と平行な平面S で円錐を切断する。この時、切断後の頂点を含む図形の体積ともう一方の図形の体積を空白区切りで出力せよ。

Input

円錐の頂点のx 座標 y 座標 z 座標

円錐の底面の中心のx 座標 y 座標 z 座標 円錐の底面の半径

点P のx 座標 y 座標 z 座標

各行のそれぞれの値はスペース区切りで与えられる。

Constraint

入力の値はすべて整数であり、その絶対値は1000以下である。

円錐の高さとその底面の半径は1以上であり、点P と円錐の距離は10-5以上ある。

Output

切断後の頂点を含む図形の体積ともう一方の図形の体積を空白区切りで出力せよ。

ただし、10-5を超える誤差を含んではいけない。

Sample Input 1

0 0 10
0 0 0 4
0 0 1

Sample Output 1

91.769438 75.782170

Sample Input 2

0 0 10
0 0 0 4
1 1 1

Sample Output 2

84.050413 83.501195

Sample Input 3

0 0 0
8 9 10 5
1 1 1

Sample Output 3

0.071663 409.709196