alexjercan/bugnet huggingface dataset:
D - 権力

問題文

10号館とはとある大学にある建物で，J研究科のメンバーが日夜研究に勤しんでいる施設である．

10号館は建物が古いことで有名であったが，今年ついに改装されることになった．
改装工事終了後は綺麗な環境で研究が出来ると皆が期待していたある日，
K研究科の一部が，改装工事終了後の10号館の部屋を侵略するという知らせが届いた．

もしK研究科に10号館の部屋が侵略されれば，その部屋で活動していたJ研究科のメンバーはこれまた建物が古いことで知られる2号館に移動する必要がある．
何とか阻止しなければならないので，J研究科は教授が権力を出しあって10号館の各部屋をK研究科から守ることにした.

10号館は N 個の部屋が1直線上に並んでおり，順番に 1,2,...,N の番号が付けられている．
K研究科は，この N 個の部屋を全て侵略しようとしてくる．
J研究科には M 人の教授が在籍しており，各教授はある区間に含まれる部屋に対して権力を発揮できる．
1人以上の教授に権力を発揮された部屋はK研究科に侵略されることはなく守ることが出来るが，どの教授からも権力を発揮されなかった部屋は侵略されてしまう．

教授は研究で忙しいので，出来るだけ少人数で全ての部屋を守りたい．
全ての部屋を守るために権力を発揮するべき教授の最少人数を求めよ．
なお，教授全員が権力を発揮しても全ての部屋を守ることが出来無い場合があることに注意せよ．

入力形式

入力は以下の形式で与えられる．

N M
a1 b1
...
aM bM

N は10号館の部屋の数であり，M はJ研究科の教授の数である．

ai, bi は, 教授 i が部屋 ai, ai+1, ..., bi
に対して権力を発揮することが出来る事を意味する．

出力形式

10号館の全ての部屋を守ることが出来るなら，そのために権力を発揮するべき教授の最少人数を1行に出力せよ．
そうでなければImpossible
を1行に出力せよ．

制約

1 ≤ N ≤ 100, 1 ≤ M ≤ 100

1 ≤ ai ≤ bi ≤ N

入力値はすべて整数である．

入出力例

入力例 1

8 4
3 7
1 5
2 5
4 8

出力例 1

2

2 番目の教授と 4 番目の教授が権力を発揮することにより，10号館の全ての部屋を守ることが出来る．

入力例 2

8 4
1 4
2 5
3 6
4 7

出力例 2

Impossible

Writer: 田村和範

Tester: 花田裕一朗
F - Acceleration of Network

インターネットと言う広大な海は少しずつ黒く塗りつぶされていった。

ボットの反乱、DDOS攻撃の嵐、ウィルスの蔓延、

何度も何度も繰り返されたクラッカーとの戦争で、人もインターネットもボロボロになった。

人の手では、インターネットはどうにもならない。

だから人は、とんでもない時間をかけて

インターネットを復旧できる「少女」を造った。

少女は、インターネットの手当をはじめた。

果てしなく広いインターネットの世界をどうにかしようと頑張った。

まだ少女ひとりでは撚り対線を織る事くらいしかできないけど、

長い長い時がすぎてインターネットが少し復旧すれば、

みんなと一緒に頑張れるだろうという期待をこめて。

問題文

少女はかつてインターネットに存在した N 個のサービスを復旧するために日々頑張っている．
現在を 0 日目とする．
インターネットがどの程度復旧しているかを復旧度という指標で表し，現在の復旧度は 0 であるとする．
少女は毎日作業をし，復旧度を 1 日につき 1 ずつ上げていく．
任意のまだ復旧していないサービス i は，復旧度が wi 以上になると自動的に復旧する．
サービス i が復旧すると，みんなが手伝ってくれることにより，復旧した次の日から xi 日間だけ作業がはかどり，復旧度の増加が加速する．
サービスには 3 つの種類があり，種類によって復旧度がどの程度増加するのかが異なる．
サービスの種類を 0, 1, 2 の番号で表すとする．
サービス i の種類を ti (∈ {0, 1, 2}) とすると，
サービス i が復旧してから d-1 日目から d 日目にかけて (1 ≤ d ≤ xi)，
ti=0 の場合は 1，
ti=1 の場合は d，
そして ti=2 の場合は d2 だけ，少女の作業とは別に復旧度が増加する．
また，同時に複数のサービスが復旧している場合，それぞれのサービスは独立に並行して復旧度を増加させる．

少女はサービスが復旧するまでにとんでもない時間がかかると思ったので，現在から何日目にサービスが復旧するか調べることにした．
またある日にち yj に復旧度がいくらになっているかも気になったので，それも Q 日分だけ調べることにした．

入力形式

入力は以下の形式で与えられる．

N Q
w1 t1 x1
...
wN tN xN
y1
...
yQ

出力形式

最初に N 行出力し，i 行目にはサービス i の復旧する日にちを出力せよ．次に Q 行出力し，j 行目には yj 日目に復旧度がいくらになっているかを出力せよ．
サービスが復旧する日にちが 3,652,425 を超える場合はMany years laterと出力せよ．

制約

0 ≤ N ≤ 105

1 ≤ Q ≤ 105

0 ≤ wi < 260

wi ≤ wi+1 (1 ≤ i < N)

ti ∈ {0, 1, 2}

1 ≤ xi ≤ 104

0 ≤ yj ≤ 3,652,425

yj < yj+1 (1 ≤ j < Q)

入力値はすべて整数である．

この問題の判定には，15 点分のテストケースのグループが設定されている．このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす．

N,Q,wi,yj ≤ 1,000

注意

0 日目の復旧度は 0 である．

wi=0 の時，サービス i は 0 日目に復旧する．

入出力例

入力例1

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

出力例1

1
3
4
0
1
3
5
7
11
19
29
46
47
48

入力例2

5 5
10000 0 20
10000 1 30
10000 0 40
10000 2 70
30000 2 10000
5000
10000
15000
20000
25000

出力例2

10000
10000
10000
10000
10039
5000
10000
40711690801
329498273301
333383477320

入力例3

2 2
3652425 0 1
3652426 2 10000
3652424
3652425

出力例3

3652425
Many years later
3652424
3652425

2つ目のサービスは復旧する日にちが 3,652,425 日を超えているのでMany years laterと出力している．

Writer : 森槙悟

Tester : 田村和範
G - 村

問題文

きつねのしえるは，休暇でとある小さな村を訪れている．彼女が驚いたのは，その村の表札がもつ性質である．

村には N 個の家屋がある．ここでは簡単のため，村は 2 次元平面であるとし，家屋はこの平面上の点であると見なす．
それぞれの家屋には表札が 1 個設けられており，その家の苗字を表していた．しえるは村の中を訪問するにつれて，この村の表札が次のような性質を持っていることに気付いた．

ある実数 R が存在する．

もし 2 つの家屋の距離が R 以下であるなら，その 2 つの家屋は同じ表札を持つ．

もし 2 つの家屋の距離が 3R 以上であるなら，その 2 つの家屋は異なる表札を持つ．

任意の 2 つの家屋の距離は R 以下であるか 3R 以上であるかのどちらかである．

ここで，家屋同士の距離は，平面上のユークリッド距離によって計測するものとする．

しえるはこの村に表札が全部で何種類あるのかが気になったが，この村は意外に広いということに気付いたので，計算機を使ってこの答えを模索することにした．

入力形式

入力は以下の形式で与えられる．

N R
x1 y1
x2 y2
...
xN yN

N は家屋の個数である．R は家屋の配置の制約に関する値である．
(xi, yi) は家屋 i の座標を表す．

出力形式

村に存在する表札の種類の数を求めよ．

制約

1 ≤ N ≤ 2 × 105

1 ≤ R ≤ 103

|xi|, |yi| ≤ 106

N は整数である．R, xi, yi は実数で，小数第 3 位まで表される．

任意の 1 ≤ i < j ≤ N に対して dij = √{(xi - xj)2 + (yi - yj)2} とおくとき，dij ≤ R か 3R ≤ dij のどちらかが満たされる．

この問題の判定には，15 点分のテストケースのグループが設定されている． このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす．

答えは 10 以下である．

入出力例

入力例 1

5 3.000
1.000 0.000
0.000 0.000
-1.000 0.000
10.000 0.000
-10.000 0.000

出力例 1

3

家屋 1,2,3 と家屋 4 と家屋 5 で表札が異なる．全体で 3 つの表札が存在する．

入力例 2

12 1.234
0.500 0.000
-0.500 0.000
0.000 0.000
0.000 -0.500
55.500 55.000
-55.500 55.000
55.000 55.000
55.000 -55.500
99.500 99.000
-99.500 99.000
99.000 99.000
99.000 -99.500

出力例 2

7

入力例 3

5 99.999
0.000 0.000
49.999 0.001
0.000 0.000
-49.999 -0.001
0.000 0.000

出力例 3

1

Writer: 楠本充

Tester: 小浜翔太郎
H - 植林

問題文

とある大学の魔法学部の生徒であるK君は広大な屋敷に住んでいる．
屋敷の裏には林が広がっていたが，所々木が生えていない箇所があった．
このままでは屋敷からの見た目が悪いと感じたので，K君は木が生えていない箇所に木を植えることに決めた．
魔法使いの卵であるK君は使い魔を召喚することが出来るので，植林の作業を使い魔にやらせようと考えた．

林は H × W 個のセルを持つ長方形領域とみなすことが出来る．
各セルは木が1本生えているか1本も生えていないかのどちらかである．
K君はこの H × W 個のセルのどれか 1 つを指定し，そこに使い魔を召喚する．
しかしK君はまだ未熟者なので，魔力を調節することが出来ず，使い魔を召喚するときは必ず 5 匹召喚してしまう．
さらに悪いことに，K君が召喚する使い魔はひねくれもので，訪れたセルに木が生えていない場合はそこに木を植えるが，訪れたセルに既に木が生えている場合はそのセルの木を消してしまう．
召喚された使い魔のうちの 4 匹は，指定されたセルを始点として東西南北に散らばり1直線上を進み，1つ1つセルを訪れていく．これらの使い魔は林の外に出ると消える．
残りの使い魔は指定されたセルのみを訪問し，その後直ちに消える．

より正確に言えば，K君がセル (i, j) に使い魔を召喚すると，i 行目か或いは
j 列目にある H+W-1 個のセルに対し，
木が生えていなければ木が植えられ，木が生えていれば木が消されるという操作が行われる．

召喚には多くの魔力を必要とするので，出来るだけ少ない召喚回数で林を木で覆いつくしたい．
K君はどのセルに使い魔を召喚すれば最小の召喚回数で林を木で覆いつくすことが出来るだろうか．

入力形式

入力は以下の形式で与えられる．

H W
a1,1 ... a1,W
...
aH,1 ... aH,W

ai,j が 1 ならセル (i,j) に木が生えていることを意味し,
0なら生えていないことを意味する．

出力形式

もし林を木で覆いつくすことが不可能なら，1行に Impossible を出力せよ．
そうでなければ，召喚回数を最小にするような召喚手順を以下の形式で H 行に出力せよ．

b1,1 ... b1,W
...
bH,1 ... bH,W

bi,j は 0 もしくは 1 でなければならず,
1 ならセル (i,j) に使い魔を召喚する事を意味し，0 なら召喚しない事を意味する．

2回同じ場所に使い魔を召喚しても意味が無いことに注意せよ．召喚回数を最小にするような召喚手順が複数ある場合はどれを出力しても良い．

制約

2 ≤ H，W ≤ 1000

H，W は偶数

ai,j ∈ {0, 1}

この問題の判定には，3 点分のテストケースのグループが設定されている． このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす．

H × W ≤ 20

入出力例

入力例 1

4 4
0 0 0 1
0 1 1 0
0 1 1 0
1 0 0 0

出力例 1

1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1

セル (1,1) とセル (4,4) に使い魔を召喚することで林を木で覆いつくすことが出来る．

Writer: 田村和範

Tester: 花田裕一朗
J - 刺身

問題文

きつねのしえるは川で釣りをしていた．黒くて細長い魚を手に入れることができたので，その場で切り刻んで刺身にして食べることにした．

魚は体長が N センチメートルある．奇妙なことに，この魚は身体の部分ごとに密度が異なっていた．
魚の身体を頭から 1 センチメートルごとに区切って番号を 1, 2, ..., N と付けるとき，身体の i 番目の部分の重みは w_i であった．
魚の i 番目から j 番目までの部分を [i..j] と表すことにする．
最初，しえるは魚の身体 [0..N-1] を 1 枚だけ持っていると見なせる．しえるはこれを切っていき最終的に N 個に分割された魚の身体 [0..0], [1..1], ..., [N-1..N-1] を得たい．

しえるは今野外におり，まな板などを持っていないので，次のようなアクロバティックな方法で魚の身体を切っていくことにした ： まず，魚の身体を 1 枚取る．これを [i..j] とする．この魚の身体は長さが少なくとも 2 センチメートル以上でなければならない．すなわち， j-i ≥ 1 でなければならない．次に，それを空中に投げる．そして日本刀を手に持ち，宙に舞う魚を真っ二つに切る．このとき，しえるは強靭な運動神経によって任意の位置でこの魚を切ることができるが，必ず 1 センチメートル区切りの位置で切るものとする．これにより，元の魚の身体 [i..j] を，任意の切断位置 k (i ≤ k < j) によって，[i..k] と [k+1..j] の 2 つに分割するのである．
このアクロバティックな方法で魚の身体を 2 つに切るとき，元の身体の重さ (=wi+wi+1+...+wj) だけコストがかかる．

しえるは，魚のすべての部分を 1 センチメートル区切りに切るのにかかるコストの合計値を最小にしたい．

入力形式

入力は以下の形式で与えられる．

N
w1 w2 ... wN

N は魚の体長である．wi は魚の i 番目の部分の重さである．

出力形式

魚を N 個に切り分けるのにかかるコストの合計の最小値を出力せよ．

制約

2 ≤ N ≤ 4,000

1 ≤ wi ≤ 1010

入力値はすべて整数である．

この問題の判定には，3 点分のテストケースのグループが設定されている． このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす．

1 ≤ N ≤ 100

入出力例

入力例 1

3
1 2 3

出力例 1

9

まず，魚全体を 2 番目と 3 番目の部分の間で切る．これには 1+2+3 = 6 のコストがかかる．
次に，1 番目と 2 番目の部分の間で切る．これには 1+2=3 のコストがかかる．合計で 6+3=9 のコストがかかり，これが最善手である．

入力例 2

6
9876543210 9876543210 9876543210 9876543210 9876543210 9876543210

出力例 2

158024691360

入力例 3

10
127 131 137 139 149 151 157 163 167 173

出力例 3

5016

Writer: 楠本充

Tester: 花田裕一朗
K - XOR回廊

問題文

KU大学では一風変わったラリーゲームが人気である．
このゲームの舞台であるサーキットには，N 個の休憩所と M 個の道があり，i 番目の道は fi 番目の休憩所と ti 番目の休憩所の間にある．
すべての道にはチェックポイントが一つずつ存在し，道 i のチェックポイントを通過するとどちらの向きで通っても pi の得点がXORで加算される．XORで加算される．大事なことなので2回言いました．

このゲームでは，同じ休憩所や道を何度通っても良いし，
ゴールにたどり着いてもそのままラリーを続行することができるが，
道の途中にあるチェックポイントを迂回して別の休憩所へ行くことは禁止されている．
そのため，どのような道順をたどれば高い得点を取ることができるかを頑張って考えなければならない点が人気のある所以である．

今回は Q 人の参加者がいて，j 番目の参加者は aj の休憩所からスタートして，ゴールである bj の休憩所まで行くことになっているようだ．
運営側の人間としてそれぞれの参加者の最高得点を前もって調べておくことにした．

入力形式

入力は以下の形式で与えられる．なお休憩所の番号は0-indexedである．

N M Q
f1 t1 p1
...
fM tM pM
a1 b1
...
aQ bQ

出力形式

Q 行出力し，j 行目には aj 番目の休憩所から bj 番目の休憩所への経路で得られる得点の最大値を出力せよ．

制約

1 ≤ N ≤ 105

0 ≤ M ≤ 2 × 105

1 ≤ Q ≤ 105

0 ≤ fi, ti < N, fi ≠ ti

0 ≤ pi < 260

0 ≤ aj, bj < N

どの休憩所からでも，道を辿っていけば任意の休憩所へたどり着ける．

休憩所 fi,ti 間を結ぶ道は高々一つしか存在しない．

入力値はすべて整数である．

この問題の判定には，60 点分のテストケースのグループが設定されている．このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす．

M ≤ 20

入出力例

入力例1

5 5 3
0 1 7
1 2 22
2 3 128
3 4 128
4 2 128
0 1
0 0
3 4

出力例1

135
128
128

Writer : 森槙悟

Tester : 田村和範
Flick Input

A: フリック入力

二次元が大好きな大学生，通称2D君は，長年使用していたガラパゴス携帯からスマホに買いかえた．初めてスマホを操作した2D君は，文字入力の方式が，昔の携帯と少し違うことに気付いた．スマホでは，画面をタッチ・フリックできることを利用して，フリック入力という方式が採用されていたのである(フリックとは，「画面上で指を滑らせて弾く操作」を意味する)．フリック入力は，次に示すような文字入力方式である．

フリック入力では，図A(a)のように，0-9の10個のボタンにより入力を行う(#と*については，今回は省略している)．各ボタンには，図のようにあ行-わ行が1つずつ割り当てられている．

図A: スマホのボタン詳細

ある1つのボタンは，図A(b)に表す方法により操作することができる．つまり，

ボタンを「タッチ」するだけだと，そのボタンに対応する「あ段」の文字を出力

ボタンを「左に向かってフリック」すると，「い段」を出力

ボタンを「上に向かってフリック」すると，「う段」を出力

ボタンを「右に向かってフリック」すると，「え段」を出力

ボタンを「下に向かってフリック」すると，「お段」を出力

ということである．フリック入力の仕方を全てのボタンについて表すと図A(c)のようになる．「ん」を出力するためには，ボタン0を上側にフリックすることに注意してほしい．

あなたの仕事は，フリック入力の操作を示す文字列が与えられたとき，その操作の結果出力される文字列を求めることである．

Input

フリック入力の操作を表す文字列が，1行で与えられる(2文字以上1000文字以下)．この文字列は，操作するボタンを表す'0'-'9'の数字と，フリック方向を表す'T'，'L'，'U'，'R'，'D'の5種類の文字の組み合わせからなる．

フリック方向を表す文字は，次の意味を表す．

'T'：タッチするだけ

'L'：左にフリックする

'U'：上にフリックする

'R'：右にフリックする

'D'：下にフリックする

例えば，"2D"は，「2のボタンを下に向かってフリック」という操作を表すため，「こ」を出力することができる．

与えられる文字列は，数字1文字とフリック方向を表す1文字が交互に現れる．また，必ず数字1文字から始まり，フリック方向を表す1文字で終わる．さらに，図A(c)において，文字がない場所に向かってフリックを行うことはない("8L"などの入力はない)．

Output

フリック入力操作の結果を表す文字列をローマ字表記で出力せよ．

ローマ字の子音には，

か行：'k'

さ行：'s'

た行：'t'

な行：'n'

は行：'h'

ま行：'m'

や行：'y'

ら行：'r'

わ行：'w'

を使用すること．ひらがな1文字を表すローマ字は，上記で表される子音と母音（'a'，'i'，'u'，'e'，'o'）をセットにして2文字で出力すること．"shi"や"fu"はこの条件に反するため間違いである．ただし，「あ行」の文字は母音1文字だけを出力し，「ん」は'n'を2回続けて"nn"と出力すること．

文字列の最後には，改行を出力すること．

Sample Input 1

5R2D

Sample Output 1

neko

Sample Input 2

8U9U6U0T

Sample Output 2

yuruhuwa

Sample Input 3

9L4U7R1L2D0U4R3U4D

Sample Output 3

ritumeikonntesuto
Problem B War II

第二次ProblemB大戦

R大学の2D好きの人たち (2DRespecters)は，A津大学で開催されるプログラミングの練習合宿に参加する．
この練習合宿では，参加者たちが自作のプログラミング問題を持ち寄り，練習に用いる．
今年は，2DRespectersの面々は手軽に作問できるB問題の作問担当者に立候補したため，B問題担当者の座を争うことになった．

戦いの舞台は，とある自販機である．
この自販機は，90円のジュースを1種類だけ販売しており，お手頃価格で購入できることで有名である．
ただし，自販機には，10円玉と100円玉の2つの硬貨しか投入することができず，釣銭もこれらの硬貨でしか支払われない．

自販機の内部には，10円玉を保存するための10円玉ストレージと，100円玉を保存するための100円玉ストレージが備え付けられており，それぞれには，始めにT枚の10円玉とH枚の100円玉が保存されている．
自販機には，硬貨を一度に一枚しか投入できず，投入された硬貨は，硬貨に対応する内部のストレージに保存される．
自販機の残金表示は，始め0円になっており，硬貨を投入すると，投入した硬貨の金額分，自販機の残金が増加する．
硬貨を投入した結果，自販機の残金が，90円以上になったならば，1本の缶ジュースがジュースの取り出し口に出てくると同時に，自販機の残金から90円を引いた額とちょうど同じ額の硬貨が釣銭として釣銭の取り出し口に出てくる．
このときの釣銭は，内部のストレージにある硬貨で払える範囲で，できるだけ多くの10円玉を用いて支払われる．
釣銭が支払われた後，自販機の残金は0円に戻る．

ただし，この自販機は次の操作を行うと壊れる．

釣銭を払えなくなったとき

10円玉ストレージの保存可能枚数の上限であるL枚を超える10円玉が保存されようとしたとき

自販機の紹介が終わったので，N人の2DRespectersのメンバーが参加したゲームについて説明する．
ゲームの開始時には，2DRespectersのメンバーiはそれぞれ10円玉ti枚と100円玉をhi枚ずつ持っている．
このゲームでは，N人全員が順番に1枚ずつ硬貨を自販機に投入していく．
このとき，メンバー1，メンバー2，....，メンバーNの順で投入する．
N人全員が1枚ずつ硬貨の投入を終えたら，前回と同じ順番で順番に1枚ずつ硬貨の投入を行い，3週目以降も同様である．
硬貨の投入は，10円玉を持っている場合は必ず10円玉を投入し，10円玉を持っていない場合は100円玉を投入するものとする．
メンバーiが硬貨を投入したとき，釣銭の取り出し口に釣銭が出てきた場合は，その全ての釣銭をメンバーiが受け取り，取り出し口に何もない状態にしてから，次のメンバーのターンに移る．

このゲームは，次の条件を最初に満たしたメンバーが勝者となり，B問題の作問担当者となる．

自販機を壊したとき

自分の順番に，硬貨を1枚も持っていないとき

なお，自販機には無限にジュースが保存されており，100円玉ストレージには無限に100円玉を保存することができる．

あなたの仕事は，B問題担当者が誰になったかを求めるものである．

なけなしの硬貨を犠牲に，B問題を賭けた壮絶な戦いが??今，始まる．
ちなみに，購入したジュースはちゃんとB問題担当者が後でおいしくいただきます．

Input

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

N T H L
t1 h1
t2 h2
...
tN hN

Nは2DRespectersの人数であり，1 <= N <= 100である．
TとHはそれぞれ，10円玉ストレージと100円玉ストレージに最初に保存されている硬貨の枚数であり，0 <= T, H <= 100である．
Lは10円玉ストレージの保存可能枚数の上限であり，T <= L <= 100である．
1 <= i <= Nのとき，tiは，2DRespectersのメンバーiの10円玉の所持枚数を表し，hiは100円玉の所持枚数を表す．0 <= ti, hi <= 100である．

Output

B問題担当者になったメンバーの番号を1行に出力せよ．

Sample Input 1

3 0 0 100
4 0
3 0
3 0

Sample Output 1

2

Sample Input 2

3 0 0 8
4 0
3 0
3 0

Sample Output 2

3

Sample Input 3

3 0 0 100
2 1
3 0
3 0

Sample Output 3

1
Acrophobia

C: 高所恐怖症

高杉やよいは，超売れっ子アイドルである．
そんな彼女には，1つ苦手なものがある．
高いところだ・・・．彼女は，極度の高所恐怖症なのである．
彼女は今回，プロデューサーの不手際により，バラエティ番組で次のようなチャレンジに挑戦することになってしまった．

今回のロケは，とある忍者屋敷のとある一室で行われる．
この部屋の床には，正方形のタイルが敷き詰められており，いくつかのタイルが抜け落ちて穴になっている．
この穴から落ちると数メートル下の池にまっさかさまである．
やよいのチャレンジ内容は，この部屋の指定された場所からスタートし，部屋の中に置かれた全ての巻物を回収し，ゴール地点まで持っていくことである．

やよいは，部屋の中を以下のルールに従って移動できる．

あるタイルから隣のタイルへ移動するとき，上下左右のタイルにのみ移動することができる．

穴に近くない場合，隣のタイルへ移動するためには，1秒だけ時間がかかる．

穴に近づいた場合，やよいは怖がってしまい図C-1のように移動時間がかかる．例えば，図中の矢印のように，[2][2]から[1][2]へ移動するためには，3秒かかる．

複数の穴が近くにある場合，最も近くにある穴に対して怖がる．

巻物を取るためにかかる時間は，0と仮定してよい．

図C-1: 穴の近くの移動時間

やよいは，なるべく早くこのチャレンジを終わらせたいと考えている．
あなたの仕事は，このチャレンジを終了するための最短時間を求めるプログラムを書き，やよいを助けてあげることである．

Input

忍者屋敷の床情報が与えられる．

まず，1行目に部屋の大きさを表す，WとHがスペース区切りで入力される(2 <= W, H <= 100)．
続くH行の各行には，W文字の文字列が入力される．
床情報を表す文字には，以下の種類がある．

'.' : 歩ける床

'#' : 穴

'S' : やよいが開始時に立っている場所

'G' : やよいが辿りつくべき場所

'M' : 巻物が置いてある場所

'S'と'G'と'M'は，歩ける床である．
'S'と'G'はそれぞれ，部屋の中にちょうど1個存在する．全ての巻物が揃っていない状態でゴールを通過しても構わない．
'M'は，部屋の中に最小で1個，最大で5個存在する．

Output

全ての巻物を集めて，スタートからゴールへたどり着くための最短タイムを1行に出力せよ．入力データには，必ずそのようなルートがあると仮定してよい．

行の最後には，改行を出力すること．

Sample Input 1

3 4
S.M
...
...
M.G

Sample Output 1

9

Sample Input 2

4 4
S..M
....
...#
#..G

Sample Output 2

18

Sample Input 3

11 7
M.........M
...........
...#.S.#...
...........
...#.G.#...
...........
M.........M

Sample Output 3

62
Anipero 2012

D: アニペロ2012

アニペロサマーライブ，通称アニペロは，さまざまなアニメソングアーティストたちが集結する，日本国内最大のアニメソングライブイベントである．アニソンが大好きな2D君は，昨年に引き続き，今年もアニペロに行くことにした．

彼は，アニペロを楽しむために，すでにサイリウムをm本購入している．サイリウムとは，折ると化学反応で光るスティックである．リズムに合わせてサイリウムを振ることで，ライブを盛り上げることができ，自分の満足度も上昇する．今回，彼が購入した全てのサイリウムは，次のような性質を持つ．

サイリウムは，折ってから時間が経過するにつれ暗くなっていき，10分で光を失う．

折ってから5分の間は，非常に明るい（以下，「レベル2」と呼ぶ）．

折ってから5分経過した後は，少し暗くなる（以下，「レベル1」と呼ぶ）．

振っても振らなくても，光を失うスピードは変わらない．

2D君は，限られたサイリウムを曲によってうまく使い分けることで，今年のアニペロでどれだけの満足度を得られそうか，以下の問題を考えることにした．

彼は，ライブ中に流れるであろう曲をn曲予想している．
各曲の長さは，全て5分である．
n曲は，連続で流れ続け，曲と曲の間は，0分と考えてよい．
各曲には，以下の3つのパラメータが与えられる．

ある曲に対して，レベル2を1本だけ振ったときに増える満足度

ある曲に対して，レベル1を1本だけ振ったときに増える満足度

ある曲において，1本も振らないときに増える満足度

サイリウムを振ったからといって，満足度が増えるとは限らない．
振ったら逆に会場の雰囲気を乱して，満足度が減る場合もある．
振らない場合も，同様のことが言える．

サイリウムは，以下のルールに従って使用しなければならない．

曲が始まる時点でのみ折ることができ，一度に何本でも折ることができる．サイリウムを折るのにかかる時間は無視してよい．

1曲で最大8本同時に振ることができる．

複数のサイリウムを振る際，以下の式により加算する満足度を計算する．

(レベル1の本数)×(レベル1の1本あたりの満足度)＋(レベル2の本数)×(レベル2の1本あたりの満足度)

1本もサイリウムを振らない場合は，1本も振らない場合の満足度だけを加算する．

一度振ると決めたサイリウムは，1曲が終了するまで持ち替えることはできない．

サイリウムは，振らずに置いておくことができる．また，サイリウムを全て使いきる必要はない．

2D君は，ライブの曲予想までは済ませたが，それだけで疲れてしまって，問題を解く気になれなかった．
あなたの仕事は，彼の代わりに，今年のライブで得られそうな最大満足度を求めるプログラムを書くことである．

Input

ライブの予想曲リストに対する満足度情報が入力される．

1行目に，ライブで歌われる曲数n (1 <= n <= 50)と，ライブ開始時に2D君が持っている新品のサイリウムの数m (0 <= m <= 50)がスペース区切りで入力される．
続くn行では，1行ずつ1曲の情報が入力される．
i番目(1 <= i <= n)の曲情報は，

曲iに対して，レベル2のサイリウムを1本振ったときの満足度ai

曲iに対して，レベル1のサイリウムを1本振ったときの満足度bi

曲iにおいて，サイリウムを1本も振らないときの満足度ci

がスペース区切りで入力される(-100 <= ai, bi, ci <= 100)．

Output

ライブ終了時の2D君の最大満足度の予想を1行に出力せよ．
最大満足度がマイナスになることもあるので，注意すること．
行の最後には，改行を出力すること．

Sample Input 1

1 5
2 3 8

Sample Output 1

10

Sample Input 2

2 10
2 2 20
2 3 -10

Sample Output 2

44

Sample Input 3

3 10
5 1 9
-3 2 1
1 11 0

Sample Output 3

102
Transparent Mahjong

F: 透明な麻雀牌

あなたは，闇に舞い降りた天災と噂されるギャンブラーの鷹巣さんと麻雀で対局することになった．
鷹巣さんは天災と噂されるだけあって，鷹巣牌という奇怪な麻雀牌を用いた対局を提案してきた．

麻雀とは，プレイヤーが互いに手牌という複数枚の牌を持ち合い，自分の手牌を相手よりもはやく，アガリの形にすることで勝利が確定するゲームである．
麻雀の牌の表側には，その牌が何であるかが描かれており，牌の裏側には，何も描かれていない．
よって，あなたが麻雀で対局するときは，あなたの手牌の表側をあなたの側に，裏側を対局者の側に向けるとよい．
こうすることで，あなたの手牌が何であるかは，あなたのみが知ることができる．
麻雀の醍醐味は，プレイヤーが互の手配を読み合い，それを楽しむことにある．

しかしながら，鷹巣牌は透明な麻雀牌である．
鷹巣牌は透明であるため，プレイヤーは互いに相手の手牌を知ることができる．
これでは，手配の読み合いを楽しむことができない．

「もはや，これは麻雀ではない．」と，鷹巣牌を用いることに納得できないあなたは，鷹巣さんとの紆余曲折を経た協議の結果，鷹巣牌と普通の麻雀牌を混ぜて対局することになった．

手始めに，あなたは，鷹巣さんの手牌のアガリ牌が何であるかを予想することにした．
鷹巣さんの手牌は，鷹巣牌と普通の牌から構成される．
問題の簡単のため，鷹巣牌と普通の牌は，1から12の12種類各4枚からなるものとする．

3n+2枚の牌からなる手牌について，次の3つの条件が満たされるとき，その手牌はアガリである．

同じ数字を組み合わせた牌の組が1つ存在する

残りの3n枚の牌は，3個の数字の組合せのnグループになる

それぞれのグループは，同じ数字を3つ組み合わせたものか，3つの連続する数字を組み合わせたものである

例えば，

1 1 1 3 3 3 5 5 5 7 7 7 8 9

のような14枚の牌は，全て鷹巣牌で構成されている．
この場合，次のように2つの牌の組合せ1つと4つのグループを作ることができ，アガリである．

(1 1 1) (3 3 3) (5 5 5) (7 7) (7 8 9)

次に，普通の牌と鷹巣牌が混ざった手牌の例を挙げる．

1 1 1 3 3 3 5 5 5 7 7 7 * *

のような14枚の牌は，12枚の鷹巣牌と2枚の普通の牌(*)で構成されている．
この場合，次のように2つの普通の牌が8と9であるかもしれないので，2つの牌の組合せ1つと4つのグループを作ることができ，アガリであるかもしれない．

(1 1 1) (3 3 3) (5 5 5) (7 7) (7 [8] [9])

同じ例について，次のように2つの普通の牌が8と8であるかもしれないので，以下のような形のアガリであるかもしれない．

(1 1 1) (3 3 3) (5 5 5) (7 7 7) ([8] [8])

しかし，7という同じ牌は4枚までしか使えないので，以下のような形のアガリであることはない．

(1 1 1) (3 3 3) (5 5 5) (7 7 7) ([7] [7])

鷹巣さんの3n+1枚の手牌が入力として与えられたときに，
鷹巣さんの手牌に1枚の牌を加えて，3n+2枚の手牌を作ることを考える．
このときに，3n+2枚の手牌がアガリになり得るような加える1枚の牌(アガリ牌)を全て求めよ．

Input

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

n
牌1 牌2 ... 牌3n+1

入力データは次の条件を満たす
nは，0 <= n <= 15を満たす．
各牌は，鷹巣牌か普通の牌である．鷹巣牌の場合は，1以上12以下の整数で表され，普通の牌の場合は，文字*で表される．

Output

アガリ牌の一覧を昇順に出力せよ．アガリ牌を1つ出力する度に改行を出力せよ．
あがり牌がない場合は，-1を1行に表示せよ．

Sample Input 1

4
1 1 1 3 3 3 5 5 5 7 7 7 9

Sample Output 1

8
9

Sample Input 2

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

Sample Output 2

1
4
7
9
10

Sample Input 3

4
1 1 1 4 4 4 7 7 7 8 8 9 *

Sample Output 3

6
7
8
9
10
11

Sample Input 4

4
1 * * * * * * * * * * * *

Sample Output 4

1
2
3
4
5
6
7
8
9
10
11
12

Sample Input 5

1
3 * 1 4

Sample Output 5

1
2
4
5
Code Art Online

G: コードアートオンライン

コードアートオンライン（CAO）は，様々な問題をプログラミングによって解くことにより，冒険を進めて行くオンラインRPGである．
CAOは，世界初のバーチャルリアリティ空間を実現したゲームであったこともあり，大人気の内に完売し，ゲームを購入したユーザ達はこの世界を楽しむはずであった．
しかし，ゲームにダイブしたプレイヤー達は，ゲームマスターから恐るべき託宣を聞かされる．

「君たちプレイヤーの内の誰かが，ラストダンジョンのラストプロブレムを解かない限り，この仮想空間から抜け出すことはできない．そして，この世界での，WAやTLE・REは，現実世界での死を意味する．心して問題にとりかかってほしい．」

あなたも，CAOのプレイヤーの内の1人で，このゲームをクリアして現実世界に戻るために，ゲーム攻略に全力を尽くしている．
ある日，あなたは次のような問題に直面することとなった．

今回，新たなダンジョンを攻略するために，n人のメンバーでパーティが組まれた．
あなたもこのパーティの内の1人である．
今から攻略するダンジョンに突入するためには，崖から見える穴を通過しなくてはならない．
無事に穴を通過できれば，ダンジョンに突入できるが，穴に突入できず他の部分に触れてしまうと，死が待っている．
さらに，1つの穴に誰かが通ると，その穴は閉じてしまうため，1人1人別々の穴に入らなければならない．

穴や人は，二次元平面上で考えることとする．
穴の形は，図G-1のような，大小様々な円である．入力では，半径の長さが与えられる．

図G-1: 穴の形

人の形は，図G-2のように人の断面が多角形で与えられる（凸とは限らない）．
入力では，多角形の形を表すために，頂点が反時計まわりで与えられる．
多角形の任意の三点は，1直線上に並ばないと仮定してよい．
さらに，頂点を構成する目的以外で，多角形の線分同士が交差することはないものとする．
穴に通すために，自由に回転してよい（ただし，z軸方向への回転は禁止する）．
人を表す多角形の頂点が，穴の円周上にある場合でも，穴を通過できるものとする．

図G-2: 人の形

パーティの中で最もアルゴリズムスキルが高いあなたは，みんなで無事に穴を通過できるかどうかの判定問題を解くことにした．
もし，無事に通過できるなら，どの人がどの穴を通過すればいいのか表示せよ．

※今回のコンテストで死ぬことはありませんが，間違ったら死ぬつもりで解いてください．

Input

1行目に，穴の数を表す整数n (1 <= n <= 100)と，パーティの人数を表す整数m (1 <= m <= n)がスペース区切りで入力される．

次の行に，穴の半径を表す整数ri (1 <= ri <= 1000)がスペース区切りでn個入力される．
これらの穴は，入力された順番に，1番の穴, 2番の穴, ..., n番の穴と数えることとする．

続いて，m人の人の形の情報が入力される．
1人の情報は，まず1行目に多角形の頂点数p (3 <= p <= 100)が入力される．
続くp行には，多角形の頂点の座標が反時計周りで与えられる．
各行には，1つの頂点を表す整数xi, yi (-1000 <= xi, yi <= 1000)がスペース区切りで入力される．
人は，入力された順番に，1番の人, 2番の人, ..., m番の人と数えることとする．

Output

i番(1 <= i <= m)の人が，何番の穴に入ればいいかを出力せよ．
i行目には，i番の人が通るべき穴の番号を出力すること．

もし，複数の通り方がある場合，辞書順で一番小さくなる通り方を出力すること．
2つの数列A = {a1, a2, ..., am}とB = {b1, b2, ..., bm}があったとき，AがBより辞書順で小さいとは，aiがbiと異なるような最初のiについて，aiがbiより小さいときのことを言う．

通り方が1つも見つからない場合は，"NG"と1行出力すること．
最後に改行を出力するのを忘れないこと．

Sample Input 1

3 3
25 100 10
8
-10 0
-2 2
0 10
2 2
10 0
2 -2
0 -10
-2 -2
4
30 0
50 0
50 40
30 40
3
30 -10
45 -70
60 -10

Sample Output 1

3
1
2

Sample Input 2

4 3
25 15 15 30
5
0 0
10 0
20 10
0 20
-20 10
3
20 0
40 0
30 10
3
-50 0
-30 0
-40 10

Sample Output 2

1
2
3

Sample Input 3

2 2
1 30
4
0 0
10 0
10 10
0 10
3
5 5
20 20
5 20

Sample Output 3

NG
かけざん

太郎君はかけざんを習いたての小学生です。なんとなく、彼はかけざんを気に入っているので、数字を見かけるとかけざんをしたくなります。そんな彼はここのところ、次のような処理を0以上の整数に施すことが好きなようです。

(処理の流れ)

手順1. ある0以上の整数nが10進数表示で一けたならばそこで処理を終了する。そうでなければ手順2に進む
手順2. 10以上の整数nを10進数表示をするとどこかの桁の間に切れ目を入れて二つの数字に分解することが可能である(例えば2012-> 20,12)。このような切り方としてありうるものに対して,得られた二つの数字を掛け合わせて最も大きいものを次のnとして手順1に戻る。(詳しくは下記の"手順2に関する補足を参照")

太郎君はこの処理を気に入っているようですが、何回手順2の操作を繰り返せばよいのか大きい数字だと予想ができず、もしかしたら無限回行われなければならないかもしれないと思っています。そこで、太郎君の兄であり大学生であるあなたに0以上の整数nに対してこの手順2を何回しなければならないかを聞いてきました。

あなたの仕事は、Q個の0以上の整数N1..NQが与えられるので、それぞれの整数で処理の終了までに何回の手順2が施されるかを求めることです。その際にもし無限回の手順が必要ならば、-1を出力してください。

手順2に関する補足

切り分けた結果、桁の初めに0がつくものも考慮に入れる必要があります。

例えばn=1024のとき、1*024 , 10*24 , 102*4をそれぞれ計算するとそれぞれ24,240,408となるため、408が選ばれ、これが次のnとなります。

Input

Q
N1
N2
...
NQ

Qは与えられる0以上の整数の個数を表す
Niは太郎君が気になっている0以上の整数で,i番目のものを表す

Constraints

1≤Q≤100
0≤Ni≤106

Output

Q個の整数を改行区切りで出力せよ

R1
R2
..
RQ

Riは、Niに対して処理を終了するまでに手順2を実行する回数を表す
Niに対して手順2を無限回だけ実行する必要がある場合はRi は -1となる

Sample Input 1

3
9
99
123

Output for the Sample Input 1

0
2
3

9は1桁の数なので、手順2が実行されることはありません。

99は2桁であり、手順2を施せば9,9としか分割できずその次の数は81となる。
81も2桁の数であり、手順2を施せば8,1としか分割できずその次の数は8となる。
1桁の数になったので処理が終了し、答えは2。

123は3桁の数なので、手順2を施します。
この場合は12,3と1,23の二つの分け方があり、それぞれでかけざんをすると36,23となるので、
36が次の数として選ばれます。

Sample Input 2

2
999999
1000000

Output for the Sample Input 2

12
1
全探索お姉さんの休日

全探索お姉さんはとても優秀な女性である。
お姉さんは格子状の道の経路の数え上げを数千程度なら簡単に数え上げてしまう。

あなたと全探索お姉さんは今、六角形のタイルが敷き詰められた部屋にいる。
お姉さんは初めて見る六角形にとても興奮している様子である。
六角形の並びを座標に表すことに不慣れなお姉さんは図1のような座標系で部屋を表した。

図1

あなたはこの座標系上である地点からある地点まで移動したい。
しかし、お姉さんは 1 分ごとに動きたい方向をあなたに指示する。
いつものお姉さんなら同じ座標の場所を通らないようにあなたに移動の指示を出すだろう。
しかし、この座標系に不慣れなお姉さんは|x×y×t|(x：x 座標、y：y座標、t:最初の指示からの経過時間[分])を 6 で割った余り
に対応する方向（図で示す番号と対応）を指示するだけで、まったくのでたらめな方向にあなたを誘導する。

図2

お姉さんを傷つけたくないあなたは、お姉さんの指示をできるだけ守りつつ目的地までたどり着きたい。
あなたは許された行動は下の 7 つの行動である。

方向 0 へ 1 タイル移動
方向 1 へ 1 タイル移動
方向 2 へ 1 タイル移動
方向 3 へ 1 タイル移動
方向 4 へ 1 タイル移動
方向 5 へ 1 タイル移動
その場に留まる

お姉さんが指示を出した直後にあなたはこれら行動のうちの必ず1つを行う。

部屋には家具があり家具が配置されているタイルの中に移動することはできない。
また、y 座標の絶対値が ly を超えたり x 座標の絶対値が lx を超えるような移動は許されていない。
しかし、お姉さんはそのような移動を指示することがある。
指示を無視するとはお姉さんが示した方向と異なる方向へ移動するか、
もしくは、その場に留まることである。

目的地にたどり着くために最小で何度指示を無視すれば良いかを出力せよ。
目的地にたどり着くことが不可能な場合は -1 を出力せよ。

Input

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

sx sy gx gy
n
x1 y1
...
xi yi
...
xn yn
lx ly

ここで、

sx, sy は出発地点の座標
gx, gy は目的地の座標
n は部屋に配置されている家具の数
xi, yi は家具があるタイルの座標
lx, ly は移動できる X, Y それぞれの座標の絶対値の上限
である。

Constraints

入力はすべて整数
-lx ≤ sx, gx ≤ lx
-ly ≤ sy, gy ≤ ly
(sx, sy) ≠ (gx, gy)
(xi, yi) ≠ (sx, sy)(1≤i≤n)
(xi, yi) ≠ (gx, gy)(1≤i≤n)
(xi, yi) ≠ (xj, yj)(i ≠ j)
0≤ n ≤ 1000
-lx ≤ xi ≤ lx (1≤i≤n)
-ly ≤ yi ≤ ly (1≤i≤n)
0 < lx, ly ≤ 100

Output

出力は1つの整数を含む1行で出力せよ。
目的地にたどり着ける場合は、最小の指示を無視する回数を出力せよ。
目的地にたどり着くことが不可能な場合は-1を出力せよ。

Sample Input 1

0 0 0 2
0
2 2

Output for the Sample Input 1

0

Sample Input 2

0 0 0 2
6
0 1
1 0
1 -1
0 -1
-1 -1
-1 0
2 2

Output for the Sample Input 2

-1

Sample Input 3

0 0 0 2
1
0 1
2 2

Output for the Sample Input 3

1
宝探し

太郎君はある広場にお宝を探しにやってきました。この広場にはたくさんのお宝が埋められていますが、太郎君は最新の機械を持っているので、どこにお宝が埋まっているかをすべて知っています。広場はとても広いので太郎君は領域を決めてお宝を探すことにしましたが、お宝はたくさんあるためどのお宝がその領域の中にあるかすぐにわかりません。そこで太郎君はその領域の中にあるお宝の数を数えることにしました。

Input

n m
x1 y1
x2 y2
...
xn yn
x11 y11 x12 y12
x21 y21 x22 y22
...
xm1 ym1 xm2 ym2

nは広場に埋まっているお宝の数を表す
mは調べる領域の数を表す
2行目からn+1行目はそれぞれのお宝が埋まっている座標を表す
n+2行目からn+m+1行目はそれぞれの調べる領域を表す
x軸の正の方向が東、y軸の正の方向が北を表す
それぞれの領域は長方形であり、xi1とyi1は長方形の南西の頂点の座標、xi2とyi2は長方形の北東の頂点の座標を表す

Constraints

1 ≤ n ≤ 5000
1 ≤ m ≤ 5×105
|xi|, |yi| ≤ 109 (1 ≤ i ≤ n)
|xi1|, |yi1|, |xi2|, |yi2| ≤ 109 (1 ≤ i ≤ m)
xi1 ≤ xi2, yi1 ≤ yi2 (1 ≤ i ≤ m)

すべての入力は整数で与えられる

Output

C1
C2
...
Cm

それぞれの領域に含まれるお宝の数を各行に出力せよ

Sample Input 1

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

Output for the Sample Input 1

3

領域の境界線上にあるお宝も領域に含まれるものとみなす

Sample Input 2

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

Output for the Sample Input 2

2
1

領域は直線や点のようになる場合もある

Sample Input 3

2 3
0 0
0 0
-1 -1 1 1
0 0 2 2
1 1 4 4

Output for the Sample Input 3

2
2
0

同じ場所に複数のお宝が存在する場合もある

Sample Input 4

5 5
10 5
-3 -8
2 11
6 0
-1 3
-3 1 3 13
-1 -1 9 5
-3 -8 10 11
0 0 5 5
-10 -9 15 10

Output for the Sample Input 4

2
2
5
0
4