alexjercan/bugnet huggingface dataset:
Problem I: Rolling Block

Problem

Rolling Blockは直方体の金属体を回転させつつ移動させ、ゴールの穴に落とすゲームである。

このゲームのクリア条件は金属体をゴールに落とすことである。

ブロックについて

下の図の(1)より、ブロックは1×1×Lの直方体である。
ブロックは東西南北のどれかの方向に回転しながら移動することができる。
しかし、ブロックはステージからはみ出るような動きをとることは出来ない。

下の図の(2)より、ブロックが横に倒れている場合は移動方向に対してこのような回転をしつつ移動する。

下の図の(3)より、ブロックが直立している場合は移動方向に対してこのような回転をしつつ移動する。

(2) 、(3) については灰色のブロックが移動前、白色のブロックが移動後のブロックとする。

黒い矢印はその方向に対してブロックが移動したことを示す。
また、白の矢印は移動する際にブロックがその方向へ回転したことを示す。
ブロックに点線が引かれているが、これは回転を分かりやすくするために引いたものである。
（実際にゲームで扱うブロックにはこのような点線は書かれていない）

以下の図はブロックの回転を補足するための図である。
サイコロのように対面の和が7になるようなブロックがあるとする。
直立している場合と倒れているブロックについて、このブロックを東西南北の4方向へ回転しつつ移動させたときの上面の数字の変化を以下の図に示す。
（実際にゲームで扱うブロックにはこのような数字は書かれていない。）

ステージについて

ステージはH×Wの二次元グリッドで与えられる(1 ≤ H,W ≤ 25) 。
二次元グリッドはそれぞれ以下の種類のセルから成る。

"." 床

床の上にブロックが乗ることができる。

"#" 壁

壁には進行不可能であり、ブロックの一部が壁の上に乗るような移動はできない。

"S" ブロックの初期位置

ブロックは１文字だけ与えられる。初期状態では直立している状態しか存在しない。

"G" ゴール地点

ゴールはステージ中に１つしか出現しない。

また、ブロックが直立している状態でしかゴールすることは不可能である。

特殊壁とスイッチ

アルファベット小文字 特殊壁

アルファベット大文字 特殊壁に対応するスイッチ

特殊壁は出現時には進行不可能であり、ブロックの一部が特殊壁の上に乗るような移動はできない。
ブロックが回転を行い直立したときにブロックの真下にスイッチがあるとき、そのスイッチは押される。

スイッチを押したとき、同じアルファベットの特殊壁が出現しているときは消滅し、逆に消滅しているときは出現する。

ステージ開始直後ではすべての特殊壁が出現しているとする。

ひとつのステージで現れる特殊壁とスイッチは最大５種類とする。

スイッチを表すアルファベットは{'A','B','C','D','E'}である。

特殊壁を表すアルファベットは{'a','b','c','d','e'}である。

スイッチと特殊壁の数はH×W個以下である。

特殊壁と同じアルファベットのスイッチがステージの中に必ず出現するとは限らない。

また、スイッチと同じアルファベットの特殊壁がステージの中に必ず出現するとは限らない。

"^" トラップ

トラップのマスの上には直方体が直立した状態で乗ってはいけない。

ステージの情報と金属体の初期位置が与えられるので、このパズルを解く最短手数を求めよ。
解が存在しない場合は-1を出力しなさい。

Input

H W L
Cell1-1 ... Cell1-W
.
.
.
CellH-1 ... CellH-W

最初にH,W,Lが与えられる。

それぞれ、ステージの縦の長さ、横の長さ、ブロックの長さを示す。

次にH×Wの二次元グリッドが与えられる。これはステージの情報を表している。

Constraints

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

1 ≤ H,W ≤ 25

1 < L < 10

Cell は Cell = {'A','B','C','D','E','S','G','a','b','c','d','e','^','#','.'} から成る。

Output

ステージの情報と金属体の初期位置が与えられるので、このパズルを解く最短手数を求めよ。

解が存在しない場合は-1を出力しなさい。

Sample Input 1

5 5 2
#####
#S.G#
#...#
#...#
#####

Sample Output 1

4

Sample Input 2

3 12 2
############
#S..A..a..G#
############

Sample Output 2

6

Sample Input 3

3 12 2
############
#S...A.a..G#
############

Sample Output 3

-1

Sample Input 4

7 13 3
#############
#S....#.....#
#.....#.....#
#.....#.....#
#...........#
#..........G#
#############

Sample Output 4

8

Sample Input 5

3 12 2
############
#S^^.^^.^^G#
############

Sample Output 5

6
Problem J: J's Final Problem

Problem

不思議なダンジョンとは構造の変化を伴うダンジョンである。不思議なダンジョンは階層が深いものから浅いものまで様々なものがあり、深い階層には凶悪なモンスターが生息していたり、財宝が眠っていたりする。ジェイは不思議なダンジョンを研究している研究者である。ある日、新しいダンジョンを掘っていたところ、とても大きく深いダンジョンに繋がってしまった。ジェイはこのダンジョンを「ジェイの最終問題」と名付けた。このダンジョンの調査が、優秀な冒険者であるあなたに依頼されることになった。冒険者の目的はできるだけ深い層のフロアに到達することである。このダンジョンの特徴を以下に述べる。

地上からダンジョンの地下1階の部屋への下りの階段は1つしか存在しない。

各部屋は1つの上りの階段と2つの下りの階段が存在する。

2つの下りの階段のうち片方を右の階段、もう片方を左の階段とする。

冒険者が階段を降りた際に、ダンジョンの構造が変化することがある。

階段を降りるとは、地下i階のある部屋から地下i+1階のある部屋へ降りることを示す。

階段を上った場合はダンジョンに対して何も変化を及ぼさない。

地下n階目には階段は存在しない。

最近、ジェイの最終問題に関する石碑が発見された。
どうやら、各階の階段を降りたときの変化がメモとして記されているようだ。

メモの形式は、

num1 direction1 : num2 direction2

という形である。

地下num1階のすべての部屋について、direction1の階段を降りている途中で、地下num2階のすべての部屋について、 direction2の階段を降りた先の部屋が消滅し、さらにそこから階段を降りることによって到達できる部屋や階段がすべて消滅する。部屋や階段の消滅に冒険者が巻き込まれた場合、冒険は失敗する。地下i階から地下i+1階へ向かう階段の途中で冒険者が失敗した場合は地下i階まで到達したものとして扱う。

石碑において言及されていない階段は、その階段を降りてもダンジョンの構造に変化を及ぼさないことを示す。

冒険者はこの石碑をヒントにして探索を行うことにした。

ダンジョンの深さnとメモの情報がm個与えられるので、最大地下何階まで到達できるかを答えなさい。

Input

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

n　m
memo1
memo2
…
memom

最初にn,mが与えられる。
それぞれ、ダンジョンの変化前の最下層の階数、石碑のメモの数を表す。
次にm行にわたりメモの情報 num1 direction1 : num2 direction2 が与えられる。

Constraints

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

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

1 ≤ n ≤ 10000

0 ≤ m ≤ (n-1)×4

1 ≤ num1,num2 ≤ n-1

direction1,direction2は"left"と"right"のいずれかである。

Output

最大地下何階まで降りることができるか1行に出力して答えよ。

Sample Input1

10 2
9 left : 9 left
9 right : 9 right

Sample Output1

9

Sample Input2

4 5
1 left : 2 right
2 left : 3 right
2 left : 3 left
1 right : 3 left
2 right : 3 right

Sample Output2

3
Problem A: Password

太郎君は、自分のパソコンを持っていて、ログイン時のパスワードを設定していた。しかし、不注意にも太郎君はそのパスワードを忘れてしまった。そこで、パスワードをメモした紙があることを思い出し、紙を見つけた太郎君はそれを見て驚いた。なんと紙は切れていて断片しか存在せず、ところどころに汚れがあり、読めなくなっていたのだ。太郎君はそのメモを参考にパスワードを推測することにした。

Problem

二つの文字列A, Bが与えられる。文字列Aの中に文字列Bが含まれているかどうかを判定し、含まれている場合は"Yes"を、そうでなければ"No"を出力せよ。
文字列Aにはアルファベットの大文字のみが含まれており、文字列Bにはアルファベットの大文字に加えて、'_'(半角アンダーバー)が含まれている。半角アンダーバーは任意の１文字を表す。

Input

文字列 A

文字列 B

Constraints

A,Bの文字列の長さはどちらも1文字以上1000文字以下である。

Bの文字列の長さがAの文字列の長さを超えることはない。

Output

"Yes"または"No"を1行で出力せよ。

Sample Input 1

ABCDE
ABC

Sample Output 1

Yes

Sample Input 2

KUSATSU
KSATSU

Sample Output 2

No

Sample Input 3

ABCABC
ACBA_B

Sample Output 3

No

Sample Input 4

RUPCUAPC
__PC

Sample Output 4

Yes

Sample Input 5

AIZU
_A

Sample Output 5

No
Problem B: Yu-kun Likes Rectangles

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらい長方形が大好きだ。そんなゆう君は３つの長方形を使って得点を得る新たな遊びを考え、得られる最大の得点を計算するためのプログラムを書くことにした。

Problem

H × W マスの長方形 A , B とh × w マスの長方形 C が与えられる。 ( H, Wはそれぞれ長方形A, Bの縦, 横のマスの数を, h, wはそれぞれ長方形Cの縦, 横のマスの数を表す )

図１のように A の各マスには整数が書かれており、Bの各マスには白または黒の色がついている。
Cの各マスにも同様に白または黒の色がついている。

図1

B の中に C と全く同じ模様の長方形があった場合、A の中でその長方形内に対応するマスに書かれている整数の和が得点として手に入る。

例えば図１のような長方形 A, B, C を使う場合、図２の赤線で示すように B の中に C と同じ模様が含まれているので、その場所から193点が得られる。

図2

B の中に C と全く同じ模様の長方形が１つ以上存在する場合、そのような長方形の中で最大何点を得ることができるだろうか？

ただし、B の中に C と同じ模様の長方形が存在しない場合は"NA” ( “ は除く ) と出力すること。
また、長方形を回転したり反転することはできない。

Input

入力の形式は以下の通りである。

H W
a(1,1) a(1,2) ... a(1,W)
a(2,1) a(2,2) ... a(2,W)
:
a(H,1) a(H,2) ... a(H,W)
b(1,1) b(1,2) ... b(1,W)
b(2,1) b(2,2) ... b(2,W)
:
b(H,1) b(H,2) ... b(H,W)
h w
c(1,1) c(1,2) ... c(1,w)
c(2,1) c(2,2) ... c(2,w)
:
c(h,1) c(h,2) ... c(h,w)

a(i,j) は長方形 A のマス (i, j) に書かれている整数を、b(i,j)は長方形 B のマス(i,j)の色を、c(i,j) は長方形 C のマス(i,j)の色を表す。
マスの色は0 が白、１ が黒を表す。

Constraints

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

入力は全て整数

1 ≤ H,W ≤ 50

1 ≤ h ≤ H

1 ≤ w ≤ W

-100 ≤ a(i, j) ≤ 100

b(i, j),c(i, j) は0か1

Output

長方形Bの中に長方形Cと全く同じ模様の場所が存在する場合、そのような場所の中でもっとも得点が高いものを出力せよ。

そのような場所が存在しない場合, “NA” ( “ は除く ) と出力せよ。

Sample Input 1

4 4
10 2 -1 6
8 1 -100 41
22 47 32 11
-41 99 12 -8
1 0 0 1
0 0 1 0
0 1 0 1
0 0 1 0
2 3
1 0 1
0 1 0

Sample Output 1

193

Sample Input 2

3 3
5 1 3
2 5 9
0 1 5
1 0 0
0 1 1
0 1 1
1 1
1

Sample Output 2

9

Sample Input 3

3 4
4 1 9 1
9 1 -1 3
2 -4 1 10
1 1 0 1
0 1 1 1
1 1 0 0
1 4
1 1 1 1

Sample Output 3

NA
Problem C: Warping Girl

Problem

会津魔法学校は, 魔法を使える者が集まる学校である. その学校の生徒の一人であるハルカは, 魔法陣の上でワープの魔法を使う事ができる.

彼女の家から学校には, 長さ L の一直線状の道がある. また, この道には所々魔法陣が描かれている.

彼女は毎日この道を使って学校に通っているため, できるだけ短い時間で学校に辿り着きたいと思っている.

そこでプログラマーであるあなたは, 彼女に学校まで行くときにかかる最小の時間を教えてあげることにした.

ハルカは, 1 分で距離 1 だけ歩いて先に進むことができる ( ＊戻ることはできない)．また, ワープの魔法陣が書いてある位置 Pi で魔法を唱えることで, Pi からちょうど Di だけ進んだ場所に Ti 分で移動することができる. 移動先に魔法陣がある場合も, 連続してワープ魔法を使用することができる.

彼女の家の位置は 0、学校の位置は L である.

Input

L n
P1 D1 T1
P2 D2 T2
.
.
Pn Dn Tn

１行目に道の長さ L, 魔法陣の数 n が与えられる.
次に n 個の魔法陣の状態が与えられる.
Pi は i 番目の魔法陣がある位置, Di は i 番目の魔法陣からワープする距離, Ti は i 番目の魔法陣を使ってワープしたときにかかる時間を表す.

Constraints

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

与えられる数は全て整数である

1 ≤ L ≤ 109
0 ≤ n ≤ min(103, L) (min はA, B の小さい方を表す)
0 ≤ Pi ≤ L - 1
0 ≤ Di ≤ L - Pi
0 ≤ Ti ≤ 103

Pi ≠ Pj

Output

学校に辿り着くための最小の時間を一行に出力せよ.

Sample Input 1

10 3
2 2 1
4 2 1
8 1 1

Sample Output 1

8

Sample Input 2

10 2
2 3 1
3 5 1

Sample Output 2

6

Sample Input 3

1 0

Sample Output 3

1
Problem D: Cheat Case

Problem

算数のテストを受けることになった俺達は、今から勉強しても赤点を取ってしまうことを確信し、カンニングで乗り切ることを決意した。

算数のテスト問題を作成するA先生はテスト用紙を手書きで作ることで知られている。彼がテスト問題を作成している時の筆跡情報を、近所の博士に作ってもらった筆跡盗聴鉛筆で盗み取る作戦だ。だが肝心の筆跡情報から問題を復元するプログラムは博士の技術では作ることができなかった。しかも、たとえ問題が復元できたとしても、俺達の頭脳では問題を解くことができない。どうすることもできなくなった俺達は、プログラマーであるあなたに、筆跡情報から問題を復元し、それを解くプログラムの作成を依頼することにした。

今回のテストでは、数式を解く問題が出題される。数式中の演算記号は＋（加算）,-（減算）,・（乗算）の3つのみで、乗算は加算、減算よりも優先して計算される。数式は必ず構文が正しいものが与えられる。また、0以外の数で、先頭が0であるものは与えられない。

問題が書かれる紙はグリッドで表される。筆跡情報は線分の集合で与えられ、各線分はX軸に水平または垂直、もしくは始点、終点が同じ（点）である。この線分は、始点から終点までにあるマスを黒く塗りつぶすことを表す。座標(0, 0)が紙の左上である。数式の各文字（0,1,2,3,4,5,6,7,8,9,＋,-,・）は以下で表される。

0
1
2
3
4
5
6

7
8
9
＋
-
・

A先生は印刷したかのような字を書くことで知られており、各文字は上記以外の書かれ方はしない。また、上記以外の文字が書かれることはない。2つ以上の文字がマスの辺を共有することはない。各文字の位置は、文字を構成するマス（黒いマス）の中で、最も左側にあるもののX座標で表される。数式の文字は、位置が小さい順に（左から右へ）解釈される。2つ以上の文字の位置が等しくなることはない。

Input

N
X11 Y11 X12 Y12
X21 Y21 X22 Y22
:
XN1 YN1 XN2 YN2

1行目に線分の数を表す1つの整数Nが与えられる。次に線分の情報がN行で与えられる。線分の情報のi行目には4つの整数Xi1, Yi1, Xi2, Yi2が空白区切りで与えられる。それぞれ、線分の1つ目の端点のX座標、Y座標、2つ目の端点のX座標、Y座標を表す。

Constraints

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

1 ≤ N ≤ 150

0 ≤ Xi1, Yi1, Xi2, Yi2 ≤ 200 (1 ≤ i ≤ N)

Xi1 = Xi2 または Yi1 = Yi2 (1 ≤ i ≤ N)

計算の途中と結果に現れる数は符号付き32ビット整数に収まる

Output

各ケースの計算結果を一行に出力せよ。

Sample Input 1

4
1 1 1 5
3 3 5 3
4 2 4 4
7 1 7 5

Sample Output 1

2

Sample Input 2

23
1 1 3 1
3 1 3 3
3 3 1 3
1 3 1 5
1 5 3 5
5 2 7 2
7 2 7 4
7 4 5 4
5 4 5 6
5 6 7 6
11 4 13 4
13 0 15 0
15 0 15 4
18 2 18 2
21 5 23 5
21 5 21 7
21 7 23 7
23 7 23 9
23 9 21 9
24 0 26 0
24 0 24 4
24 4 26 4
26 0 26 4

Sample Output 2

-328

Hint

1つのグリッドを2度以上塗りつぶすことがある

'1'など、1つの線分で表すことが可能でも、2つ以上の線分で表す場合がある

Sample Input 1の数式。

Sample Input 2の数式。"-7"の部分のように、ある文字を覆う最小の長方形の内部に別の文字が入り込む場合がある。
Problem E: Lonely Adventurer

13歳の誕生日の祝いに少年Gは父親と一緒に船旅に出ていた。しかし航海の途中、不運にも船が嵐に見舞われて船が転覆してしまう。彼が目を覚ますと、そこは無人島だった。冒険家の父親の影響もあり、彼はこの状況にひるむ事なく、無人島でサバイバル生活をすることを決意した。動物を倒して肉を焼いたり、木の実を採取することで食いつなぎ、大木の下で野宿をすることでなんとか生き延びることができた。しかし、どうやら最近島の様子がおかしいようだ。動物たちは皆奇妙な行動を取るし、これは何か悪い事の予兆なのかもしれない。早くこの島から脱出せねば。

とはいえ、島からどう離れればよいのか。海の向こうには別の島が見えるが、そこまで行く方法が見当たらない。途方に暮れ、海岸沿いを歩いていたとき、ふと彼は N 隻のボートを発見した。調べてみたところ、これらはどれもうまく動くようだ。よし、このボートを使って向こうの島まで脱出しよう。ただ次の島でもまた同じようなサバイバル生活が始まるかもしれない。そのとき困らないためにも、予備として全てのボートを運んでおこう。この島で何かが起こる前に早い事済ませないと。

Problem

N 隻の各ボート i (1 ≤ i ≤ N) にはそれぞれ島Aから島Bまで(島Bから島Aまで)の移動にかかる時間 Ti (分)が与えられている。少年Gはできるだけ早く、全てのボートを初めにいる島Aから島Bに運びたいと考えている。彼がボートを運び終えるのに要する最短の時間(分)を出力せよ。ただし、ボートは一度に 2 隻まで連結して運ぶことができ、そのときにかかる時間は 2 隻のボートの内、より時間がかかるボートの時間に等しい。例えば 2 分と 4 分のボートを連結させて運ぶ場合、島Aから島Bまで（島Bから島Aまで）の移動に 4 分かかる。また 3 分のボート 2 隻を連結させて運ぶ場合は 3 分かかることになる。なお、ボートの乗り換えにかかる時間は無視してよいものとする。

Input

1行目に整数 N が与えられる。
2行目には N 個の整数 Ti が空白区切りで与えられる。

Constraints

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

1 ≤ N ≤ 1000

1 ≤ Ti ≤ 10000

Output

全てのボートを運び終えるのに要する最短の時間(分)を1行で出力せよ。

Sample Input 1

4
1 2 3 4

Sample Output 1

11

Sample Input 2

5
3 3 3 3 3

Sample Output 2

21
Problem F: Remainder Zero

Problem

整数の集合A,Bについて,次の条件を満たす整数 xがいくつ存在するか答えよ。

Ai mod x = 0 かつ x mod Bj = 0 がすべての i (1 ≤ i ≤ N), j (1 ≤ j ≤ M) について成り立つ。

(a mod b はaをbで割ったときの余りを意味する)

Input

N M
A1 A2 ... AN
B1 B2 ... BM

Constraints

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

1 ≤ N, M ≤ 5

1 ≤ Ai, Bj ≤ 1014 (1 ≤ i ≤ N, 1 ≤ j ≤ M)

Output

条件を満たす整数 x がいくつ存在するか一行で出力せよ。

Sample Input 1

1 2
18
6 9

Sample Output 1

1

Sample Input 2

1 2
256
2 4

Sample Output 2

7
Problem G: Yu-kun Likes Building Block

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君はプログラミングと同じくらい長方形の積み木が大好きだ。
そんなゆう君は、最近積み木で山を作る遊びに熱中している。

今日もゆう君は山を作って遊んでいたのだが、持っている積み木で沢山の山を作る事は簡単なので、今日は全ての積み木を使って出来る山の数を最小化しようと考えた。
そこでゆう君は、実際に全ての積み木を使って山を作った後、本当にその山の数が最小になっているのかどうかを確かめるために、プログラムを書く事にした。

Problem

ゆう君が持っている積み木の数と積み木の情報が与えられるので、そこから作る事のできる山の数の最小値を求めよ。

積み木は平面上の長方形として表され、その長方形の縦と横の長さが積み木の情報として与えられる ( 積み木の高さは考慮しない )。

山は積み木の上に０個以上の積み木が積み重なったものである。
ただし、積み木の上に別の積み木を重ねるためには、上になる積み木の縦、横の長さはそれぞれ下となる積み木の縦、横の長さ未満でなければならない。
１つの積み木の上に直接置くことができる積み木は1つまでである。

積み木を置く際に、2つの積み木の縦、横はそれぞれ平行でなければならない（斜めの状態で重ねることは許されない）。
積み木を回転させ縦と横を交換しても良い。

例えば、図1のような状態について考える。長方形は積み木を表し、その左にある数字は積み木の縦の長さを、下にある数字は横の長さを、長方形の中の左上の数字は積み木の番号を表している。
最初の状態では５つの山がある。

図1のように重ねていく事で、最終的に山の数を２つまで減らすことができる。

図1

Input

N
w0 h0
w1 h1
...
wN-1 hN-1

入力は全て整数である。

Nは積み木の数を表す。 ( 1 ≤ N ≤ 100 )

wi,hiはそれぞれ積み木の横、縦の長さを表す。( 1 ≤ wi,hi ≤ 109 )

Output

全ての積み木を使ってできる山の数の最小値を１行に出力せよ。

Sample Input 1

3
1 1
2 2
3 3

Sample Output 1

1

Sample Input 2

5
2 3
3 5
1 2
1 4
3 5

Sample Output 2

2

Sample Input 3

5
1 5
2 4
3 3
4 2
5 1

Sample Output 3

5

Sample Input 4

10
5 11
12 12
4 14
22 12
11 13
3 3
3 3
12 5
55 55
1 1

Sample Output 4

3
Problem H: Caterpillar

とある天空都市に住む大学生のGは、芋虫のいも太郎を飼っている。 彼は、いも太郎に最短歩数で全てのえさを順番に食べるように躾けをした。彼の友人であるあなたは、彼からいも太郎が本当に躾けられているかどうかを調べて欲しいと依頼されたので、プログラムを書くことにした。

Problem

複数の障害物とエサがグリッド状のエリア内に存在する。頭と 5 つの胴体を持つ芋虫がこのエリアを探索する。芋虫が順番に最後までエサを食べたときの最小の歩数を求めよ。
ただし全てのエサを食べることが不可能な場合は -1 を出力すること。なお、エサの上に芋虫の頭が重なったとき、エサを食べることができる。

エリアは以下の文字で構成される。

何もないマス -> ‘.’

障害物 -> ‘#’
エサ -> ‘1’, ‘2’, ..., ‘9’

芋虫の初期位置 -> 頭 ‘S’, 胴体 ‘a’, ‘b’, ‘c’, ‘d’, ‘e’

芋虫は頭 ’S’ から 5 つの胴体 ‘a’, ‘b’, ‘c’, ‘d’, ‘e’ と 順に上下左右の 4 方向に隣接して、それらが連なって構成される。
例えば、芋虫の構成を表したとき、以下の (1) は正しい芋虫の構成であるが、 (2) や (3) のような構成はありえない。

(1) 正しい
.bc
Sad
..e

(2) eが存在しない
Sab
.dc

(3) "Sab" と "cde" とで芋虫が切断されている
Sab
cde

(1) のような正しい芋虫の構成は、入力で与えられた状態から任意の回数の芋虫の移動の間、一貫して保たれる。
つまり、芋虫の頭が、隣接している 4 つのマスのうちのいずれかの空いているマスに一歩進むと、その後に続いて 1 番目の胴体は頭が元あったマスへ動き、2 番目の胴体は 1 番目の胴体が元あったマスへ、 3 番目は 2 番目の元へ‥… というように頭の軌跡をたどるように胴体が動く。以下は、１マス左へ動くときの例である。

移動前 移動後
...... ......
...bc. ...cd.
..Sad. .Sabe.
....e. ......

芋虫の移動できる場所は以下のように定められている。

芋虫は自分の胴体、障害物、エリア外を移動することは出来ない。ただしエサの上を、そのエサを食べずに移動することは出来る。

移動前に胴体が進む先にあった場合でも、移動後に頭と胴体が重ならないならば移動できる。

Input

H W N
area

入力は H + 1 行で与えられる。1行目には 3つの整数 H, W, N (2 ≤ H ≤ 10, 2 ≤ W ≤ 10, 1 ≤ N ≤ 9) が書かれている。Hはエリアの高さ、Wは幅、Nがエサの個数を表す ( このとき 6 + N ≤ H × W が必ず成立する ) 。

2 行目から H + 1 行目までの各行には ´S´,´1´, 2´ , … ´9´,´a´,´b´,´c´,´d´,´e´,´#´,´.´ からなる W 文字の文字列が書かれており，各々がエリアの各区画の状態を表している。また ´S´,´a´,´b´,´c´,´d´,´e´ は芋虫の初期状態を表している。初期状態の芋虫に覆われるようにしてエサや障害物は存在しない。また、芋虫の初期位置およびエサの位置は正しく入力されることが保証されている。

Output

芋虫がエサを順番通りに食べたときの最小の歩数、またそれが不可能なら -1 を出力せよ。

Sample Input1

5 8 3
#.......
#.####2#
#.#.3..#
#.######
.1Sabcde

Sample Output1

14

Sample Input2

2 6 2
.1.baS
.2.cde

Sample Output2

7

Sample Input3

2 6 2
.1#baS
.2.cde

Sample Output3

-1
Problem I: Sum of Last Digits

Problem

3つの整数 n, m, k が与えられるので

n1%10 + n1+m%10 + n1+2m%10 + ... + n1+(k-1)m%10

を計算せよ。 a % b は a を b で割ったときの余りを表す。

Input

n m k

1行に n, m, k が与えられる。

Constraints

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

0 ≤ n ≤ 1018

0 ≤ m ≤ 109

1 ≤ k ≤ 109

Output

答えを1行に出力せよ。

Sample Input 1

1 1 9

Sample Output 1

9

Sample Input 2

2 1 3

Sample Output 2

14

Sample Input 3

6 11 11

Sample Output 3

66

Sample Input 4

100 7 12

Sample Output 4

0

Sample Input 5

123 123 3

Sample Output 5

11
Problem K: Witch Craft Moves

Problem

会津魔法学校は、魔法を使える者が集る学校である。
会津魔法学校には1~Nまでの番号がついた教室と教室同士をつなぐ廊下がある。教室や廊下は何度でも通ることができる。また、会津魔法学校には任意の教室u,v間を0個以上の教室と廊下を一度ずつ通って移動することができるような経路がただ1つある。
各教室には魔法陣が設置してある。この魔方陣によって、教室に入る度に入った者の魔力が増減させられてしまうのだ。生徒の移動を助けるために以下の二つの質問に応えてほしい。

質問1

0 A B

教室AからBへ移動したときの魔力の残量を出力してほしい。教室AとBでの増減も含む。また、この質問開始時点での魔力の量は毎回0である。

質問2

1 A C

教室Aの魔力の増減量がCだけ変動させる。

Input

N
cost1
:
costN
a1 b1
:
aN-1 bN-1
Q
query1
:
queryQ

入力の最初に教室の数Nが与えられる。続くN行に各教室に入ったときの魔力が増減する量が与えられる。i行目の値がi番の教室の情報に対応する。続くN-1行に廊下の情報が与えられる。j行目の廊下はaj番目とbj番目の教室をつなぐことを表す。次に質問の数Qが与えられる。続くQ行に上記の形式で質問が与えられる。

Output

各質問1について、答えを１行に出力せよ。

Constraints

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

1 ≤ N≤ 2000

1 ≤ Ai≤ 2000

1 ≤ Bi≤ 2000

1 ≤ aj,bj ≤ N

1 ≤ Q≤ 1000000

-10000 ≤ Ci≤ 10000

Sample Input 1

7
1
2
3
4
5
6
7
1 2
1 3
3 4
3 5
5 6
5 7
10
0 1 7
0 2 7
1 1 15
0 1 7
0 2 7
0 1 1
1 1 -15
0 1 7
0 2 7
0 1 1

Sample Output 1

16
18
31
33
16
16
18
1
Problem A: Yu-kun Likes an Integer

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらい数字が大好きだ。そんなゆう君は最近、表に0から9までのいずれかの数字の書かかれたプレートをn枚購入してn桁の数を作る遊びに熱中している。
今月もゆう君は貰ったお小遣いでn枚のプレートを買いに行こうと考えていた。

Problem

プレートは表に書かれている数字によって値段が異なる。
それらを使って作れるn桁の数をできる限り小さくしたい。
ゆう君の所持金額と各プレートの値段、購入するプレートの枚数が与えられるので、そこから作ることのできる数の最小値を求めよ。

購入するプレートの値段の総和が所持金額を超えなければ自由にプレートを購入できる。
同じ数字の書かれたプレートを複数枚購入しても良い。

プレートは必ずn枚購入しなければならない。n枚購入できない場合は "NA" と出力すること。

購入後はn枚のプレートを任意の順番で一直線上に並べる。
そうしてできる数字の列を10進数の数とし、その値が最小になるようにしたい。
先頭に1つ以上の0が連続していても良い。 ( 例えば 0019 なら 19 となり, 0000 なら 0 として考える )

図１は０、１、９のプレートを購入した場合についての説明である。

図1 : 0,1,9のプレートを購入した場合

Hint

この問題を解くに当たって、以下のことを参考にしても良い。
整数値を文字列に変換する方法を示す。
value を文字列として str に代入する。

Cの場合

#include<stdio.h>

int main(){
int value = 123; // この値を文字列に変換する
char str[6]; // この変数に value を文字列にしたものが入る
sprintf(str,"%d",value);
return 0;
}

C++の場合

#include<sstream>

using namespace std;

int main(){
int value = 123; // この値を文字列に変換する
string str; // この変数に value を文字列にしたものが入る
stringstream ss;
ss << value;
ss >> str;
return 0;
}

JAVAの場合

class Main {
public static void main(String args[]){
int value = 123; // この値を文字列に変換する
String str = new Integer(value).toString(); // この変数に value を文字列にしたものが入る
}
}

Input

n m
c0 c1 c2 ... c9

１行目に２つの整数 n ,m が空白区切りで与えられる。n は購入するプレートの枚数, m はゆう君の所持金額を表す。

２行目には10個の整数が空白区切りで与えられる。 ci ( i は0以上9以下 ) は表に i が書かれたプレートの値段を表す。

Constraints

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

1 ≤ n ≤ 5

0 ≤ m ≤ 500

1 ≤ ci ≤ 1000 ( 0 ≤ i ≤ 9 )

Output

n枚のプレートを購入し、それらを任意の順番で並べることでできる数の値の最小値を出力せよ。

先頭にいくつかの０を含む場合はそのまま出力すること。 ( 例えば答えが 0019 の場合は先頭の０を取り除いて 19 とするのではなく、そのまま 0019 と出力すること )
所持金額では n 枚プレートを購入できない場合は "NA" と出力すること。

Sample Input 1

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

Sample Output 1

0

Sample Input 2

3 10
8 4 5 3 5 6 9 10 11 2

Sample Output 2

119

Sample Input 3

5 30
25 51 32 9 2 1 10 2 5 10

Sample Output 3

04555

Sample Input 4

5 100
101 101 101 101 101 101 101 101 101 101

Sample Output 4

NA
Problem B: Yu-kun Likes Letters in the English Alphabet

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらい英小文字が大好きだ。
そんなゆう君は紙と丸と線、そして英小文字を使う新しい遊びを考え、その採点用プログラムを書くことにした。

Problem

初期状態として、紙に V 個の丸と E 本の線が書かれている。丸には0から昇順に番号がつけられており、各丸の中には英小文字が1つ書かれているか、何も書かれていない。 各線は異なる２つの丸を結んでいる。1つの丸が26本以上の線で結ばれることはない。

遊びの手順は以下の通りである。

何も書かれていない丸を１つ選ぶ。 そのような丸が存在しない場合はこの処理を終了する。

丸の中に英小文字を１つ書く。　ただし丸が既に英小文字の書かれている丸と線で結ばれている場合、その英小文字と同じ英小文字は書くことはできない。

1. に戻る。

上記の手順に従って全ての丸に英小文字を書いた後、丸の番号が小さい順に丸の中の英小文字を並べ文字列を作る。
こうしてできる文字列を辞書順で最小となるようにしたい。
２つの同じ長さの文字列 s, t があり、 s が t より辞書順で小さいとは次のような場合を言う。
si は文字列 s の i 番目の英小文字を、 ti は文字列 t の i 番目の英小文字を表す。
si が ti と異なるような最小の i について、 si が ti より小さい。

紙の初期状態が与えられるので、そこから上記の手順にしたがって作成できる文字列のうち辞書順最小のものを出力せよ。

Input

V E
a0 a1 ... a(V-1)
s0 t0
s1 t1
...
s(E-1) t(E-1)

１行目に丸の数 V と線の数 E が空白区切りで与えられる。

２行目に丸の初期状態が空白区切りで与えられる。

ai が英小文字の場合は i 番目の丸にその英小文字が書かれており、'?'の場合は i 番目の丸には何も書かれていないことを表す。

続く E 行に線の情報がsi ti として与えられ、これはsi番の丸と ti 番の丸が線で結ばれていることを表す。

Constraints

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

1 ≤ V ≤ 100,000

0 ≤ E ≤ 200,000

ai は英小文字, または '?' のいずれか ( 0 ≤ i ≤ V-1 )

0 ≤ si, ti ≤ V-1 ( si < ti , 0 ≤ i ≤ E-1 )

１つの丸が26本以上の線で結ばれることはない

Output

問題文中の手順に従って作成可能な文字列のうち、辞書順で最も小さいものを1行に出力せよ

Sample Input 1

3 3
c ? ?
0 1
0 2
1 2

Sample Output 1

cab

Sample Input 2

3 2
c ? ?
0 1
0 2

Sample Output 2

caa

Sample Input 3

7 6
? a ? ? z a ?
0 1
0 2
3 4
4 5
4 6
5 6

Sample Output 3

baaazab

Sample Input 4

5 0
? ? ? ? ?

Sample Output 4

aaaaa
Problem C: Changing Grids

Background

A君とB君は、『Changing Grids』というゲームに熱中している。このゲームは2人用で、プレイヤー1がステージを構成し、プレイヤー2がそのステージに挑戦しゴールを目指すというものである。

今、A君とB君はこのゲームを何度かプレイしているが、A君の連勝でB君は1度も勝つことができていない。そこであなたは、B君にこのゲームを攻略するためのヒントを教えてあげることにした。

Problem

時刻T0 = 0における縦H×横Wの大きさの二次元グリッドの状態がArea0として与えられる。次に、このグリッドの状態は時刻Tiにおいて、状態Areaiに切り替わる。この切り替わる過程はN回繰り返される。初期状態のグリッドにはスタートの位置'S'とゴールの位置'G'が与えられる。いずれかのグリッドにおいてゴールへ辿り着ける場合は、そのときの最小歩数を出力し、ゴールへ辿り着けない場合は、'-1'を出力せよ。なお、以下の条件も満たす必要がある。

Areaiは以下の要素で構成されている。

‘.’は何もなく移動可能なマス

’#’は障害物であり、移動不可能なマス

'S'はスタート位置を表すマス

'G'はゴール位置を表すマス

プレイヤーは現在いるマスの隣接している上下左右のいずれか1マスに移動する、または現在いるマスに留まるのに1秒かかる。ただし、障害物のマスやグリッドの範囲外には移動できない。

歩数は、現在プレイヤーがいるマスから上下左右のマスへ1マス進むと1増加する。その場に留まる場合には増加しない。

全てのグリッドの大きさは縦H×横Wである。

1マス移動、またはその場に留まった後にグリッドが切り替わる際、次のグリッドにおいて障害物が存在しないマスであれば今のグリッドの状態に関わらず移動が可能である。

全てのグリッドにおいて、初期のグリッドに与えられたゴール位置に到達した場合ゴールとみなす。

Input

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

H W
Area0
N
T1
Area1
T2
Area2
.
.
TN
AreaN

1行目に2つの整数H,Wが空白区切りで与えられる。これは、それぞれ二次元グリッドの縦と横の大きさを表す。2行目からH+1行目までの各行に初期状態の二次元グリッドの状態が与えられる。H+2行目に整数Nが与えられる。これは、二次元グリッドの変化する回数を表す。H+3行目以降にN個の二次元グリッドの切り替わる時刻Tiとその状態が与えられる。ただし、Tiは全て整数である。

Constraints

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

2 ≤ H,W ≤ 20

1 ≤ N ≤ 15

1 ≤ Ti ≤ 200 (T1 < T2 < ... < TN)

スタート位置'S'とゴール位置'G'はそれぞれ初期の二次元グリッドに1つだけ存在する。

Output

スタートからゴールへ到達するための最小の歩数を出力せよ。ただし、ゴールに到達できない場合は'-1'を出力せよ。

Sample Input 1

2 2
S.
.G
1
3
##
##

Sample Output 1

2

1番目のグリッドに切り替わる時刻T1は3であり、時間内にプレイヤーはスタートからゴールまでの最短歩数が2歩で辿り着くことが可能なので2を出力する。

Sample Input 2

2 2
S.
.G
1
2
##
##

Sample Output 2

-1

Sample Input 3

2 3
S##
##G
4
2
###
.##
3
###
#.#
5
###
##.
7
###
###

Sample Output 3

3

Sample Input 4

4 3
S..
...
.G.
...
4
2
###
#.#
###
#.#
4
###
#..
#..
###
6
###
#.#
###
#..
8
###
#..
#..
###

Sample Output 4

3

Sample Input 5

3 3
S##
###
##G
1
1
...
...
...

Sample Output 5

4
Problem D: Smell Searcher

Problem

廃津大学では強烈な香りを放つN個の廃材が一列に並んでいます。
廃材には1からNの番号が順番にふられていて、i番目の廃材は強さaiの香りを放っています。

リヒト君は仕事で、すべての廃材の放つ香りの総和を求めるよう依頼されました。
香りの総和がM以上になると「大変きつい仕事」とみなされ特別支給金がもらえます。

この仕事を行うために、リヒト君は精度Rの香り検出器を使います。
精度Rの香り検出器を使うとi番目の廃材の香りを測ろうとすると同時にi−R,i−R+1,...,i−1,i,i+1,...,i+R−1,i+R番目の廃材の香りも検出されます。言い換えると、閉区間[ max(i−R,1), min(i+R,N) ] の廃材の香りを検出します。ここで、max(a,b)はaとbの最大値、min(a,b)はaとbの最小値を表します。

ただし、測った廃材の1つ隣の廃材の香りの強さは本来の香りの強さよりC減らされ、2つ隣の廃材の強さ香りは本来の香りの強さより2*C減らされて検出されます。つまり、j(0≤j≤R)個隣にある廃材の香りの強さは ai − j * C として検出されます。結果的に、i番目の廃材に精度Rの検出器を使うことで検出された香りの強さの最大値がi番目の廃材の香りの強さとして認識されます。

精度の高い検出器を使うとその分費用がかかるため、リヒト君は検出器が認識した1からN番目の廃材の香りの総和がM以上になる最低の精度Rの値を知りたいと思っています。

Input

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

N M C
a1 a2 ... aN

1行目に、1つの整数N,M,Cが空白区切りで与えられる。2行目にNつの整数が空白区切りで与えられる。aiはi番目の廃材の香りの強さを表す。

Constraints

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

1 ≤ N ≤ 105

1 ≤ M ≤ 1014

1 ≤ C ≤ 109

0 ≤ ai ≤ 109 (1 ≤ i ≤ N)

Output

精度Rの検出器を使って認識される廃材の香りの総和をM以上にしたときのRの最小値を出力せよ。
それが不可能な場合は−1を出力せよ。
Rは必ず0以上であり、負の値の精度は存在しない。

Sample Input1

6 25 3
8 5 1 1 2 6

Sample Output1

1

このとき、精度0の検出器を使うと
8 + 5 + 1 + 1 + 2 + 6 = 23　で25以上になりません。
精度1の検出器を使うと
max(8,5-3) + max(8-3,5,1-3) + max(5-3,1,1-3) + max(1-3,1,2-3) + max(1-3,2,6-3) + max(2-3,6)
= 8 + 5 + 2 + 1 + 3 + 6 = 25 で25以上になるので1が正解です。

Sample Input2

4 10 1
1 2 3 4

Sample Output2

0

Sample Input3

4 11 1
1 2 3 4

Sample Output3

-1
Problem E: Rooted Tree Game

Problem

初期状態として複数の根付き木が与えられる。これに対しAliceとBobはゲームを行う。ゲームは2人交互に行い、先手がAliceで後手がBobである。ターンが回ってきたプレイヤーは以下の行動を取る。

根(親を持たない頂点)を1つ選択する。この頂点をSとする。

Sを根とする根付き木に含まれる頂点を選択する(ここではSも選択可能)。この頂点をTとする。

SからTへの経路上にある頂点を、SとTも含めすべて削除する。また、削除された頂点が端点であるような辺もすべて削除する。

ターンが回ってきた時点で頂点がすべて削除されていた場合、そのプレイヤーの負けとなる。

AliceとBobが常に最適な行動を取る時、与えられた初期状態に対し、勝利するプレイヤーを判定せよ。

以下の図は、プレイヤーの行動の例を示す。

Input

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

N M
p1
p2
:
pM

1行目に、初期状態の頂点数Nと辺の数Mが空白区切りで与えられる。この時、各頂点を表す番号は1~Nである。次のM行では、辺の情報が与えられる。このうちi行目では1つの整数piが与えられる。これは、頂点piから頂点iへの辺があることを表す。言い換えると、頂点iの親が頂点piであることを表す。

Constraints

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

1 ≤ N ≤ 1000

0 ≤ M < N

i < pi ≤ N ( 1 ≤ i ≤ M )

Output

勝利するプレイヤーの名前(AliceまたはBob)を1行に出力せよ。

Sample Input1

6 3
4
4
5

Sample Output1

Alice

Sample Input2

6 4
2
5
4
5

Sample Output2

Bob
Problem F: Coupling

Problem

愛津大学では毎年大規模な合コンが行われています。

今年はN人の男性とM人の女性が参加します。

それぞれ男性は0から順にN−1までIDが割り振られおり、女性は0から順にM−1までIDが割り振られています。

この合コンでは自分の「大好きな人」と「そこそこ好きな人」のIDを提示します。

男性はそれぞれ女性のIDを、女性はそれぞれ男性のIDを提示します。

その後、以下のルールに従ってカップルが成立します。

男性は複数の女性、女性は複数の男性とカップルになってはいけない。

互いに「大好きな人」と提示した男性と女性でペアができる。
そこから、任意のペアを選びカップルを作ることができる。

片方が「大好きな人」、もう片方が「そこそこ好きな人」と提示した男性と女性でペアができる。
そこから、任意のペアを選びカップルを作ることができる。

互いに「そこそこ好きな人」と提示した男性と女性でペアができる。
そこから、任意のペアを選びカップルを作ることができる。

ルール2で出来たカップル、ルール3で出来たカップル、ルール4で出来たカップルの順にカップルの数が最大になるようにカップルが成立する。

サジ君はこの合コンの主催者です。
近年では参加者の数が多くなり手動でカップルの数を把握するのが大変になってきました。そこでプログラマーであるあなたは、サジ君の手伝いをすることにしました。上記のルールに従ってカップルを作った時の「大好きな人」同士のカップルの数と「大好きな人」と「そこそこ好きな人」によるカップルの数と「そこそこ好きな人」同士のカップルの数を出力するプログラムを作成してください。

Input

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

N M
L1
a1 b1
a2 b2
:
aL1 bL1
L2
c1 d1
c2 d2
:
cL2 dL2
L3
e1 f1
e2 f2
:
eL3 fL3
L4
g1 h1
g2 h2
:
gL4 hL4

1行目にそれぞれ男性の参加者の数と女性の参加者の数を表す2つの整数N,Mが与えられる。次に男性側の大好きな人を表すデータの数L1が与えられる。続くL1行にaiとbiが空白区切りで与えられる。それぞれ、IDaiの男性がIDbiの女性を「大好き」であることを示す。

続く行に男性側のそこそこ好きな人を表すデータの数L2が与えられる。続くL2行にciとdiが空白区切りで与えられる。それぞれ、IDciの男性がIDdiの女性を「そこそこ好き」であることを示す。次に女性側の大好きな人を表すデータの数L3が与えられる。続くL3行にeiとfiが空白区切りで与えられる。それぞれ、IDeiの女性がIDのfiの男性を「大好き」であることを示す。

続く行に女性側のそこそこ好きな人を表すデータの数L4が与えられる。続くL4行にgiとhiが空白区切りで与えられる。それぞれ、IDgiの女性がIDhiの男性を「そこそこ好き」であることを示す。

Constraints

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

1 ≤ N,M ≤ 100

0 ≤ ai,ci,fi,hi ≤ N−1

0 ≤ bi,di,ei,gi ≤ M−1

0 ≤ L1,L2,L3,L4 ≤ 2000

L1 > 0, L2 > 0 において (ai,bi) ≠ (cj, dj) ( 0 ≤ i < L1, 0 ≤ j < L2 )

L3 > 0, L4 > 0 において (ei,fi) ≠ (gj, hj) ( 0 ≤ i < L3, 0 ≤ j < L4 )

(ai,bi) ≠ (aj, bj) ( i ≠ j )　( 0 ≤ i < L1, 0 ≤ j < L1 )

(ci,di) ≠ (cj, dj) ( i ≠ j )　( 0 ≤ i < L2, 0 ≤ j < L2 )

(ei,fi) ≠ (ej, fj) ( i ≠ j )　( 0 ≤ i < L3, 0 ≤ j < L3 )

(gi,hi) ≠ (gj, hj) ( i ≠ j )　( 0 ≤ i < L4, 0 ≤ j < L4 )

Output

問題文のルールに従ってカップルが成立した時の、「大好きな人」同士のペアの数と「大好きな人」と「そこそこ好きな人」のペアの数と「そこそこ好き」同士のペアの数を空白区切りで1行に出力せよ。

Sample Input 1

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

Sample Output 1

2 0 0

この場合男性1と女性1、男性2と女性2が大好き同士でカップルとなり「大好き同士」のペア数が2になる。
すると、男性0のことが「大好き」な女性も「そこそこ好き」な女性もいなくなってしまいます。
また、女性0のことが「大好き」な男性も「そこそこ好き」な男性もいなくなってしまうため以降カップルは成立しなくなります。

Sample input 2

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

Sample Output2

2 1 0