alexjercan/bugnet huggingface dataset:
Problem H: Yu-kun Likes a Directed Graph

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらいお絵描きが大好きだ。
これまでゆう君は、丸と矢印で沢山絵を書いてきた。矢印は必ず丸と丸を結ぶようにして描いてある。ある日ゆう君はこれらの絵がグラフであることを知る。

丸は頂点と呼ばれ、矢印は辺と呼ばれているらしい。更にゆう君は、矢印を描く際に、必ずその上に１つ正の整数を書いていた。このように、辺に重みがあり有向な辺からなるグラフは重み付き有向グラフと呼ばれる。

今日ゆう君は、新たに閉路という言葉を知った。閉路とは、連結した辺の列であり、それに含まれるどの頂点も高々1度しか現れないもので、最初の頂点と最後の頂点が同じであるようなものをいう。閉路の辺の重みの総和が負になる場合、そのような閉路は負の閉路と呼ばれる。

新たな言葉を沢山知ったゆう君は一つの問題を思いついた。

Problem

閉路を持たない重み付き有向グラフが与えられる。
異なる２つの頂点 i, j を選び、i から j に重み w ( w < 0 ) の有向な辺を1本追加する。
これによってグラフ内に負の閉路ができるような i、 j をみつけ、その負の閉路に属する辺の重みの総和の最大値を求めよ。
そのような i, j が存在しない場合は"NA"と出力すること。

Input

V E w
s0 t0 c0
s1 t1 c1
...
s(E-1) t(E-1) c(E-1)

１行目に頂点の数 V, 辺の数 E, 追加する辺の重み w が空白区切りで与えられる。

続く E 行に有向な辺の情報が si ti ci として与えられる。 ( 0 ≤ i ≤ E-1 )

これは、 si から ti に向けて重み ci の有向な辺が存在することを表す。

Constraints

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

2 ≤ V ≤ 100000

1 ≤ E ≤ 500000

-100 ≤ w < 0

0 ≤ ci ≤ 100 ( 0 ≤ i ≤ E-1 )

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

入力中に同じ si と ti のペアが現れることはない

si と ti は異なる

Output

重み w の有向な辺を追加することで出来る負の閉路に属する辺の重みの総和の最大値を１行に出力せよ。
どこに辺を追加しても負の閉路が作れない場合は"NA"と出力すること。

Sample Input 1

3 2 -3
0 1 1
0 2 5

Sample Output 1

-2

Sample Input 2

3 2 -1
0 1 1
0 2 5

Sample Output 2

NA

Sample Input 3

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

Sample Output 3

-1

Sample Input 4

5 4 -30
0 1 1
1 3 15
1 4 4
2 1 3

Sample Output 4

-12
Problem I: Hard Beans

Problem

大津大学では豆が盛んです。
N個の豆が一直線上に並んでいます。
それぞれ0から順にN−1まで番号がふられており、i番目の豆の硬さをaiとします。

シアン君は理想の豆の硬さをDだと考えています。しかし、シアン君は面倒くさがりなのであまり遠くにある豆を取りに行きたくありません。したがって、シアン君はl番目の豆からr番目の豆の中で硬さがDに最も近い豆を知りたいと思っています。

シアン君はQ個の質問をしてくるので、それぞれの質問に対し閉区間[l,r]番目にある　| 豆の硬さ − D |　の最小値を求めるプログラムを作成してください。(ただし、| a | は aの絶対値を表します。)

Input

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

N
a0 a1 ... aN−1
Q
l0 r0 D0
l1 r1 D1
.
.
.
lQ−1 rQ−1 DQ−1

1行目に、1つの整数Nが与えられる。2行目に、Nつの整数が空白区切りで与えられる。3行目に、クエリの数が１つの整数Qとして与えられる。続く4行から3+Q行までにクエリの値l,r,Dが与えられる。

Constraints

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

1 ≤ N ≤ 105

0 ≤ |ai| ≤ 106 (0 ≤ i ≤ N−1)

1 ≤ Q ≤ 105

0 ≤ Di ≤ 106

0 ≤ li ≤ ri ≤ N−1

Output

各クエリに対し、Dと[l,r]番目の豆の中で硬さDに最も近い豆の硬さとの差の絶対値を1行に出力せよ。

Sample Input1

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

Sample Output1

0
1
1

Sample Input2

10
4 5 0 21 9 100 12 9 0 8
5
0 3 20
2 5 100
8 9 9
5 5 10
0 9 20

Sample Output2

1
0
1
90
1
Problem J: Yu-kun Likes To Play Darts

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらいダーツが大好きだ。
そんなゆう君は最近ダーツにはまっていたが、普通のダーツに飽きてしまったため独自のダーツボードを作ることにした。

ダーツについてはダーツを参照。

Problem

ゆう君が考えたダーツの内容は以下の通りだ。

無限に広いダーツボードには得点の書かれた多角形が幾つかある。
プレイヤーはダーツの矢を1本だけ持っている。
プレイヤーは矢を投げ、いずれかの多角形に矢を刺すことでそこに書かれている得点を得る。
それ以外に刺さった場合は得点は得られない。

ゆう君は矢を投げる位置を決めたのだが、正確に刺さるとは限らない。
ダーツボードを2次元平面とし、ゆう君が狙う位置を点(cx,cy)とする。
ゆう君の投げた矢が刺さる場所は、点(cx,cy)を中心とする半径rの円に含まれる任意の点から一様な確率で選ばれる。
ばれる点の座標は整数である必要はない。

ダーツボードの情報とゆう君が狙う位置(cx,cy)、半径rが与えれるので、ゆう君が獲得することの出来る得点の期待値を答えよ。

Input

n cx cy r
0番目の多角形の情報
1番目の多角形の情報
...
(n-1)番目の多角形の情報

nはダーツボード上にある多角形の数である。
多角形の情報は以下の形式で与えられる。

p score
x0 y0
x1 y1
...
x(p-1) y(p-1)

pは多角形の頂点数を表し、scoreは多角形に書かれている得点を表す。
多角形の各線分は(xi,yi)と(xi+1,yi+1) ( i < p-1 )の頂点を繋いだ線分と、(xp-1,yp-1)と(x0,y0)の頂点を繋いだ線分である。

Constraints

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

入力は全て整数で与えられる

1 ≤ n ≤ 50

0 ≤ cx, cy, x, y ≤ 1000

1 ≤ r ≤ 100
3 ≤ p ≤ 10

1 ≤ score ≤ 100

多角形の頂点は、隣り合った頂点を時計回り、または反時計回りに訪問するような順番で与えられる

多角形の辺が別の多角形の辺と共通な点をもつことはない

多角形が別の多角形を内包することはない

矢が多角形の辺上に刺さった場合、得点は得られないものとする

Output

ゆう君が獲得することの出来る得点の期待値を1行で出力せよ。小数点以下は何桁数字を出力しても構わない。ただし、解答の誤差は0.000001(10-6)を超えてはならない。

Sample Input 1

1 2 2 1
4 1
0 0
2 0
2 2
0 2

Sample Output 1

0.2500000000

Sample Input 2

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

Sample Output 2

1.0000000000

Sample Input 3

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

Sample Output 3

1.0574955319

Sample Input 4

1 10 10 1
4 10
0 0
1 0
1 1
0 1

Sample Output 4

0.0000000000
Problem A: A White Wall

Background

とある都市に住むＡ氏の家の敷地は、真っ白な壁に囲まれている。壁に物足りなさを感じたＡ氏は、近所の子供たちを呼んで、壁を自由に塗ってもらうことにした。子供達にはそれぞれ壁の好きな区間を選んで色を塗ってもらう。 さて、壁はどのように塗られただろうか。

Problem

0〜N-1の区画で構成される以下のような円型の白い壁がある。

M人の子供たちがこの壁の開始位置aと開始位置からの長さLを指定し、反時計回りにaから(a+L) mod Nまで色を塗る(ただし、a mod Nとは、aをNで割ったときの余りを表す)。ここで、他の人が色を塗った区間と重ねて塗ることもでき、その場合は、色が塗られた1つの区間とみなす。色が塗られた区間を大きい順に出力せよ。また、その大きさの区間がいくつあるかも同時に出力せよ。

Input

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

N M
a0 L0
a1 L1
...
aM−1 LM−1

1行目にそれぞれ壁の長さと壁に色を塗る人の数を表す2つの整数N,Mが空白区切りで与えられる。続くM行には、各人が色を塗る区間の開始位置aiと長さLiが与えられる。

Constrains

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

2 ≤ N ≤ 100

1 ≤ M ≤ 50

0 ≤ ai < N

1 ≤ Li ≤ N

Output

色が塗られた区間の長さとその長さの総数を色が塗られた区間が大きい順に出力する。

Sample Input 1

5 3
0 1
2 1
3 1

Sample Output 1

2 1
1 1

Sample Input 2

4 2
0 2
1 2

Sample Output 2

3 1

Sample Input 3

10 3
2 1
4 1
9 2

Sample Output 3

2 1
1 2
Problem B: Mountain Climbing

Problem

なりよし君は山登りの計画を立てています。計画はとても大切です。高原・盆地が多いのか、峰・窪地が多いのか、山腹があるのか、状況によって用意する荷物も変わってきます。

なりよし君が持っている登山ガイドブックには、今回登山に利用する道の一定の距離毎の標高がスタート地点からゴール地点まで順に書かれています。

ガイドブックに書かれている標高をスタート地点からゴール地点まで順に
a1, a2, a3, ..., aNとし、高原、盆地、山腹、峰、窪地を次のように定義します:

高原

ai-1 < ai = ai+1 = ... = aj > aj+1 (1 < i < j < N)

盆地

ai-1 > ai = ai+1 = ... = aj < aj+1 (1 < i < j < N)

山腹

ai-1 < ai = ai+1 = ... = aj < aj+1 (1 < i < j < N)

もしくは
ai-1 > ai = ai+1 = ... = aj > aj+1 (1 < i < j < N)

峰

ai-1 < ai > ai+1 (1 < i < N)

窪地

ai-1 > ai < ai+1 (1 < i < N)

高原

盆地

山腹

山腹

峰

窪地

あなたは、なりよし君の為に、高原・盆地・山腹・峰・窪地、それぞれの数を計算するプログラムを書くことにしました。

Input

入力は次のような形式で与えられる:

N a1 a2 a3...aN

Nは与えられる標高の数を表す整数である。
aiは標高を表す整数である( 1 ≤ i ≤ N )。それぞれ空白区切りで与えられる。

Constraints

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

1 ≤ N ≤ 100000

-100000 ≤ ai ≤ 100000

Output

高原の数、盆地の数、山腹、峰、窪地の数を順番に空白区切りで一行に出力せよ。

Sample Input 1

5 1 2 3 4 3

Sample Output 1

0 0 0 1 0

Sample Input 2

12 10 5 15 15 20 20 12 12 8 3 3 5

Sample Output 2

1 1 2 0 1
Problem C: Manhattan Warp Machine 1

Problem

とある宇宙では、1次元の整数座標点上に星が存在し、宇宙人達はマンハッタンワープ装置を使い、星間を移動している。

このワープ装置には、N個のボタンが付いており、ボタンiを押すと、現在いる星からのマンハッタン距離がdiである任意の星にコストciでワープすることができる。

今、点0の星にいるある宇宙人が点xの星に行きたいと考えている。

点xの星に辿り着くまでの最小のコストを答えよ。

辿り着けない場合は-1を出力せよ。

1次元上の整数座標点には必ず星が存在する。

点x1と点x2間のマンハッタン距離は| x1 - x2 |で表される。

Input

N x
d1 c1
...
dN cN

入力は全て整数で与えられる。

1行目にNと行きたい星の座標xが空白区切りで与えられる。

続くN行に、移動可能なマンハッタン距離diとコストciが1行ずつ空白区切りで与えられる。

Constraints

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

1 ≤ N ≤ 15

0 ≤ x ≤ 105

1 ≤ di ≤ 105

1 ≤ ci ≤ 100

与えられるマンハッタン距離diは全て異なる。

Output

点xの星に辿り着くまでにかかる最小コストを1行に出力せよ。辿り着くことが不可能な場合は-1を出力せよ。

Sample Input 1

2 5
1 1
2 1

Sample Output 1

3

Sample Input 2

2 12
9 1
3 2

Sample Output 2

3

Sample Input 3

1 3
4 1

Sample Output 3

-1
Problem D: Friday the 13th

Problem

今年も「立命館大学競技プログラミング合宿」が開催されることとなった。僕は毎年開催されるこの合宿をとても楽しみにしている。しかし、欲望に耐え切れず合宿前に散財してしまい、お金に余裕が無くなってしまった。そこで僕は、立命館大学の最寄り駅である南草津まで移動するのに最も安く済む青春18きっぷを使うことにした。この切符は安く済む代わりに乗り換えが多く発生し、移動に丸1日使わなければならないのでとても疲れる。そんな移動をする日が13日の金曜日であることに気づいたのは会津若松駅を出発した後だった。僕は12時間、不安を感じながら電車に揺られるはめになった。

今日は合宿2日目、2015年3月15日、日曜日である。13日は特に何事もなく南草津に到着したが、僕はもうこのような不安を味わいたくないと思った。そこで2日目のジャッジである僕は、指定された期間内に存在する13日の金曜日の数を求める問題を出題し、プログラムを作成してもらうことにした。

閏(うるう)年の定義は以下の通りである。

西暦年が4で割り切れる年は閏年である。

ただし、100で割り切れる年は閏年でない。

ただし、400で割り切れる年は閏年である。

Input

空白で区切られた6つの整数Y1, M1, D1, Y2, M2, D2が1行で与えられる。

Constraints

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

1 ≤ Y1 ≤ Y2 ≤ 1018

1 ≤ Mi ≤ 12

1 ≤ Di ≤ 31 (Mi = 1, 3, 5, 7, 8, 10, 12)

1 ≤ Di ≤ 30 (Mi = 4, 6, 9, 11)

1 ≤ Di ≤ 28 (Mi = 2 かつ Yi年は閏年でない)

1 ≤ Di ≤ 29 (Mi = 2 かつ Yi年は閏年である)

Y1年M1月D1日はY2年M2月D2日より0日以上前の日付である

Output

Y1年M1月D1日からY2年M2月D2日までの間に存在する13日の金曜日の数を1行に出力せよ。

Sample Input1

2015 3 13 2015 3 13

Sample Output1

1

Sample Input2

2015 2 14 2015 3 15

Sample Output2

1

Sample Input3

1234 5 6 789012345678901234 5 6

Sample Output3

1357101234567708000
Problem E: Distinct Dictionary

Background

辞書をこよなく愛する者がいた。彼らは自分だけの辞書を作ることが大好きである。
そこであなたは彼らの辞書に、自由にカスタマイズする機能を付け加えてあげることにした。

Problem

初めに、何の単語も入っていない空の辞書が存在する。
N個の文字列SidとQ個のクエリが与えられる。
各クエリはクエリの種類kと文字列を指すidで与えられる。
クエリの種類は以下の3つである。

k=1のときSidを辞書に追加する。

k=2のときSidを辞書から削除する。

k=3のとき辞書に追加された文字列の中でSidを先頭からの部分文字列に含み且つ辞書順最小の文字列のidを出力する。無い場合は-1を出力する。

各クエリに答えるプログラムを書いてほしい。

注意：
入力のサイズが大きいので高速な入力に対応する形式を推奨する。

Input

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

N
S1
S2
.
.
.
SN
Q
k1 id1
k2 id2
.
.
.
kQ idQ

1行目に、1つの整数Nが与えられる。2行目からN+1行に、N個の文字列Sidが与えられる。
N+2行目にクエリの数Qが与えられ、続くQ行に各クエリの種類を表すkと文字列を指すidが与えれる。

Constraints

文字列は全て異なる。

N個の文字列Sidの長さの合計は106を超えない。

既に辞書に追加されている文字列が再び追加されるような入力は存在しない。

辞書に追加されていない文字列を削除するような入力は存在しない。

与えられる文字列に含まれる文字は英小文字のみである。

1 ≤ N ≤ 105

1 ≤ id ≤ N

1 ≤ Q ≤ 105

1 ≤ |Sid| ≤ 105 (ただし、|s|は文字列sの長さを表す。)

Output

クエリごとに解答を一行に出力せよ。

Sample Input1

3
apple
app
banana
9
1 1
3 1
3 2
3 3
2 1
1 2
3 1
3 2
3 3

Sample Output1

1
1
-1
-1
2
-1

Sample Input2

7
aaaab
aaa
aaaa
aaaaaabc
abbbbbc
ab
abbb
13
1 1
3 2
1 4
3 2
1 3
3 2
2 3
3 3
1 5
1 7
3 6
2 5
3 6

Sample Output2

1
4
3
4
7
7
Problem F: Sum of Numbers

Problem

a以上b以下の整数が書かれたカードがそれぞれc枚ずつあります。
これらc(b-a+1)枚のカードの中からd枚のカードを選択したとき、それらのカードに書かれている整数の合計がeになる場合の数を1,000,000,007で割った余りを求めてください。

Input

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

a b c d e

1行目に、5つの整数a b c d eが空白区切りで与えられる。

Constraints

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

1 ≤ a ≤ 1000

a ≤ b ≤ 1000

1 ≤ c ≤ 100

1 ≤ d ≤ 1000

c ≤ d ≤ c(b-a+1)

1 ≤ e ≤ 20000

Output

場合の数を1,000,000,007で割った余りを出力せよ。

Sample Input1

2 5 3 3 11

Sample Output1

3

{2,2,2,3,3,3,4,4,4,5,5,5}の中から3枚選び合計が11になるのは、
{2,4,5},{3,3,5},{3,4,4}の３通りである。

Sample Input2

1 2 3 4 100

Sample Output2

0

{1,1,1,2,2,2}の中から4枚選び合計が100になるのは0通りである。
Problem G: Yu-kun Likes a Treasure

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらい財宝が大好きだ。ゆう君は今日も財宝を探すため洞窟を探索する予定だ。そこでゆう君は洞窟の地図から、洞窟を全て見て回る際に歩く距離を求めるプログラムを書くことにした。

Problem

洞窟の情報とゆう君の初期位置が与えられる。Fig.1のように、 洞窟は2次元平面上の多角形で表される部屋が、１つ以上繋がった集合で構成される。部屋が別の部屋と接する場合は必ず点で接し、その接点が洞窟の道となり、接点に訪れるとその道を通ったことになる。

道は扉で閉ざされており、扉が閉まっている状態でその道を通ることはできない。扉を開くためには部屋の中にちょうど１つだけ存在するボタンを押す必要がある。ボタンは2次元平面上の点として表される。

ゆう君はボタンが存在する点を訪れることでボタンを押すことができる。ボタンを押すと部屋にある全ての扉が開く。Fig.1では部屋の中にある丸がボタンを表し、顔のマークがゆう君を、そして矢印が指しているボタンがゆう君のいる場所を表す。ボタンを押して扉を開いた後、道を通るとすぐに全ての扉は閉まる。そのため、そこから別の部屋へと移動するためには再度その部屋の中にあるボタンを押す必要がある。ゆう君は最初、いずれかの部屋の中にあるボタンと同じ場所にいる。

Fig. 1

Fig. 2 に移動の例を示す。番号の付いている矢印はゆう君の移動経路を表す。

次の順番で移動することは可能である。

1 -> 2 -> 3 -> 4

次の順番で移動することは不可能である。

1 -> 4

これは、1の経路で移動し部屋同士の接点を訪れるとその瞬間に扉が閉まるからである。

Fig. 2

ゆう君が洞窟内の全ての道を通り、再度初期位置に戻ってくるまでにかかる移動距離の最小値を出力せよ。ただし、同じ道を何度通っても良い。

Input

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

n m
部屋1の情報
部屋2の情報
…
部屋nの情報

n,mはそれぞれ洞窟を構成する部屋を表す多角形の数、ゆう君が最初にいる部屋の番号を表す。

部屋の情報は次の形式で与えられる。

p
x1 y1
x2 y2
…
xp yp
bx by

pは多角形の頂点数を表す。(xi,yi) と (xi+1,yi+1) の頂点を繋いだ線分が多角形の一辺である。ただし、p番目の頂点は１番目の頂点と繋がる。 (bx,by) は多角形の内部にあるボタンの位置を表す。多角形は反時計回りで与えられる。

Constraints

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

1 ≤ n ≤ 15

1 ≤ m ≤ n

3 ≤ p ≤ 20

0 ≤ x,y,bx,by ≤ 1000

多角形は反時計回りで与えられる

多角形が別の多角形を内包するようなことはない

多角形はその内部 ( 多角形の辺は含まない ) にちょうど１つだけボタンを持つ

任意の異なる２つの多角形は共通な面積を持たない

任意の異なる２つの多角形a,bにおいて、aとbの接点は高々１つしかない

任意の異なる２つの多角形a,bにおいて、直接または１つ以上の多角形を経由することでaからbへ移動することができる

Output

ゆう君が初期位置から全ての道を通って再度初期位置に戻ってくるまでにかかる移動の距離の総和の最小値を出力せよ。小数点以下は何桁数字を出力しても構わない。ただし、解答の誤差は0.00001(10-5)を超えてはならない。

Sample Input1

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

Sample Output1

14.6502815399

Sample Input2

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

Sample Output2

8.0644951022

Sample Input2

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

Sample Output2

18.9356648257
Problem H： Puzzle and Hexagons

Backgorund

超大人気ゲーム「パズル&ヘキサゴンズ」がついにリリースされた。このゲームは超面白すぎてドハマりする人が続出。あまりの熱中度に医師から中毒認定を受ける者も続出した。世界各国の有志達はこのゲームの中毒者達を助けるために「パズル&ヘキサゴンズ」のシミュレータを作り、危険な実機でのプレイを避けるよう促そうとした。あなたにはシミュレータ作りに協力して欲しい。

Problem

正六角形のマスを縦にH個、横にW個敷き詰めた盤面が与えられる。
Fig.1はH=4,W=7の時の盤面とそれに対応するマスの座標(x,y)を示す。

Fig.1

初期状態で各マスには色のついたブロックが存在する。
ブロックの色は以下のようにアルファベット一文字で表現される。

'R' ・・・赤

'G' ・・・緑

'B' ・・・青

'P' ・・・紫

'Y' ・・・黄

'E' ・・・水

次に操作の数Qが与えられる。

各操作では回転の中心座標(x,y)が与えられ、そのマスの周囲にある6つのブロックを時計回りに一つ回転させることを示す。(Fig.2 参照)。
このとき、ブロックが存在しないマスも空のブロックが存在すると考えて時計回りに一つ回転させる。
ただし、指定された座標とその周辺の６つのマスの内いずれか一つでもH×Wの盤面の中に存在していない場合は回転を行わない。

Fig.2

次に以下の処理ができなくなるまで繰り返す。

Fig.3において、ブロックAの位置からB, C, Dの位置のいずれのマスにもブロックが存在しないとき、ブロックAはCの位置に落下する。マスB, Dが存在しない場合はブロックも存在しないと考え、マスCが存在しない場合は落下の処理を行わない。

1の処理が可能なブロックが存在する場合は1に戻る。

同じ色のブロックが3つ以上繋がっている場合、そのブロックは全て消滅する。
2つのブロックが繋がるとはマスの一辺を共有することである。

注意：この一連の処理は、操作が一つも与えられていない状態（初期状態）でも行われる。

Fig.3

全ての操作を実行した後の最終的な盤面を出力せよ。

Input

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

H W
F0,H−1 F1,H−1 … FW−1,H−1
F0,H−2 F1,H−2 … FW−1,H−2
.
.
.
F0,0 F1,0 … FW−1,0
Q
x0 y0
x1 y1
.
.
.
xQ−1 yQ−1

1行目に、盤面の縦と横のサイズを表す2つの整数HとWが与えられる。
2行目からH+1行目に、各添字に対応する盤面の色を表す文字列が与えられる。
H+2行目に、操作の数Qが与えられる。
続くQ行に回転の中心のマスの座標を表すxとyが与えられる。

Constraints

3 ≤ H ≤ 50

3 ≤ W ≤ 50

0 ≤ x < W

0 ≤ y < H

1 ≤ Q ≤ 100

Fi,j ( 0 ≤ i < W , 0 ≤ j < H ) は'R','G','B','P','Y','E'のいずれかである。

Output

全ての操作を行った後の盤面をH行で出力せよ。
ただし、ブロックが無いマスは'.'で表すこと。

Sample Input1

3 3
RGR
RBP
YEB
1
1 1

Sample Output1

…
YBG
EBP

Fig.4はSample Input1における状態の遷移を表したものである。

Fig.4

Sample Input2

4 5
BYYGG
RRRRR
RRBRR
YYGGB
2
3 1
3 1

Sample Output2

.....
.....
.....
B.BGB

Sample Input3

4 4
BEEP
ERYY
BBRP
RBYP
1
1 2

Sample Output3

....
....
....
.B..

盤面の初期状態ですでに消えるブロックがあること注意。
両端にあるブロックの落下処理に注意。
Problem I: Hopping Mind

Problem

チエノとカカオは同じ喫茶店で働く姉妹である。2人はとても仲が良く、ある日、とあるテーブルゲームで遊ぶことになった。

ゲームはRマス×Cマスの盤面と、駒としてうさぎのTPを用いる。盤面の各マスは白か黒の色が塗られている。最初にTPを盤面の右下(R,C)におき、2人で次の行動を交互に行う。TPの現在の位置を(a,b)とすると、そこからジャンプ可能な位置(i,j)を1つ選び、TPをそこにジャンプさせる。TPがジャンプ可能な位置(i,j)は以下をすべて満たす。

1 ≤ i ≤ R かつ 1 ≤ j ≤ C かつ i ≤ a かつ j ≤ b かつ 1 ≤ (a-i) + (b-j) ≤ K

(i,j)は白いマスである

自分のターンにTPをジャンプさせることができなくなった場合、負けとなる。

チエノが先手、カカオが後手でこのゲームを行う。カカオは頭の中でゲームを最後まで先読みすることができ、常に最適な行動をとる。この時、チエノが勝つ方法が存在するかどうかを判定せよ。

Input

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

R C K
G1,1 G1,2 ... G1,C
G2,1 G2,2 ... G2,C
:
GR,1 GR,2 ... GR,C

1行目に3つの整数R,C,Kが空白区切りで与えられる。次のR行に盤面の情報としてC個の".”または"#”が与えられる。Gi,jは盤面の位置(i,j)の色を表し、”.”が白、"#”が黒を表す。

Constraints

1 ≤ R,C ≤ 1000

1 ≤ K ≤ 2000

GR,Cは“.”である

Output

チエノが勝つ方法が存在する場合は”Chieno”を、存在しない場合は”Cacao”を1行に出力せよ。

Sample Input1

3 3 2
...
...
...

Sample Output1

Chieno

Sample Input2

3 3 2
#.#
.#.
#..

Sample Output2

Cacao
Problem J: Yu-kun Likes a lot of Money

Background

会津大学付属幼稚園はプログラミングが大好きな子供が集まる幼稚園である。園児の一人であるゆう君は、プログラミングと同じくらいお金が大好きだ。ゆう君は、今日もお金を稼ぐために財宝の眠る島を訪れた。ゆう君は事前に財宝のありかの描かれた地図を手に入れている。その地図をもとに出来るだけ多くのお金を稼ぎたい。ゆう君は最大でどのくらいお金を手に入れることができるだろうか？

Problem

地図、ゆう君の初期位置、財宝の種類とそれらから得られるお金、そして小さい岩を破壊するために必要な費用の情報が与えられる。地図の情報は hマス × wマスのフィールドとして与えられる。地図の各マスに書かれている文字とその意味は次の通りである。

'@' : ゆう君が最初にいる位置を表す。ゆう君が移動した後は道と同じように扱う。

'.' : 道を表す。このマスは自由に通ることができ費用もかからない。

'#' : 大きな岩を表す。このマスは通ることができない。

'*' : 小さな岩を表す。一定の金額を支払うことで壊すことができる。壊した後は道になる。

'0','1',...,'9','a','b',...,'z','A','B',...,'Z' : 財宝があるマスを表す。このマスを訪れることでそこに書かれている文字に対応する財宝の金額分のお金を得る。ただしお金を得ることが出来るのは最初に訪れた時のみである。

ゆう君は１回の移動で隣接する上下左右のいずれかのマスに移動することができる。
ただし、地図の外へ出るような移動はできない。

後払いをすることができるため、小さな岩を壊す際にそれに必要な金額をその時に所持している必要はない。そのため、ゆう君は最終的に小さな岩を壊す際にかかった金額の総和以上のお金を得ている必要がある。

ゆう君が得られる最大の金額を出力せよ。

Input

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

h w n r
c1,1 c1,2 … c1,w
c2,1 c2,2 … c2,w
…
ch,1 ch,2 … ch,w
m1 v1
m2 v2
…
mn vn

１行目に地図の縦の長さh,横の長さw,地図に含まれる財宝の数n,小さな岩を破壊するためにかかる費用rが空白区切りで与えられる。

続くh行に地図を表す各マスの情報ci,jがw個与えられる。 ( 1 ≤ i ≤ h, 1 ≤ j ≤ w )

続くn行に財宝の種類mk とその財宝の金額vkが空白区切りで与えられる。 ( 1 ≤ k ≤ n )

Constraints

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

1 ≤ h,w ≤ 8

0 ≤ n ≤ min(h×w -1,62) ただし、min(a,b)はa,bの最小値を表す

1 ≤ vi ≤ 105 ( 1 ≤ i ≤ n )

1 ≤ r ≤ 105

cj,k, ml を除く全ての入力は整数として与えられる ( 1 ≤ j ≤ h, 1 ≤ k ≤ w, 1 ≤ l ≤ n )

地図にはちょうどひとつ'@'が書かれている

地図にはちょうどn個の財宝が書かれている

地図に書かれている財宝の種類は入力で与えられたmlのいずれかである

地図に同じ種類の財宝が２つ以上現れることはない

Output

ゆう君が得られる最大のお金の金額を1行に出力せよ。

Sample Input1

3 3 1 10
@0.
...
...
0 100

Sample Output1

100

Sample Input2

3 3 1 10
@#b
.#.
.#.
b 100

Sample Output2

0

Sample Input3

3 3 1 20
@*C
..*
...
C 10

Sample Output3

0
Problem K: Manhattan Warp Machine 2

Problem

とある宇宙では、3次元の格子点上に星が存在し、宇宙人達はマンハッタンワープ装置という装置を使い、星間を移動している。

このワープ装置には、N個のボタンが付いており、ボタンiを押すと、現在いる星からのマンハッタン距離がdiである任意の星にワープすることができる。

ワープ装置は改良され、コストがかからずに移動出来る。

今、(0, 0, 0)の星にいるある宇宙人があるM個の星を訪れたいと考えている。

M個の星を全て訪れるのに最短で何回ワープをする必要があるか答えよ。

もし、1つでも訪れることが不可能な星がある場合は-1を出力せよ。

M個の星は好きな順番に訪れることが出来、全て訪れた後に(0, 0, 0)に戻って来る必要は無い。

3次元上の全ての格子点には必ず星が存在する。

点(x1, y1, z1)と点(x2, y2, z2)間のマンハッタン距離は| x1 - x2 | + | y1 - y2 | + | z1 - z2 |で表される。

Input

N M
d1 ... dN
x1 y1 z1
...
xM yM zM

入力は全て整数で与えられる。

1行目にN, Mが与えられる。

2行目に移動可能なマンハッタン距離diが空白区切りで与えられる。

3行目以降のM行に、M個の訪れたい星の格子点の座標(xi, yi, zi)が1行ずつ空白区切りで与えられる。

Constraints

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

1 ≤ N ≤ 15

1 ≤ M ≤ 15

1 ≤ di ≤ 3×105

-105 ≤ xi, yi, zi ≤ 105

与えられるマンハッタン距離diは全て異なる。

与えられる格子点の座標は全て異なる。

Output

M個の星全てを訪れるのにかかる最短ワープ回数を1行に出力せよ。
訪れることが不可能な星がある場合は-1を出力せよ。

Sample Input 1

2 1
1 2
5 0 0

Sample Output 1

3

Sample Input 2

2 2
9 3
3 0 0
3 9 0

Sample Output 2

2

Sample Input 3

1 1
4
3 0 0

Sample Output 3

-1
Divisor

Problem

12以下の自然数 N が与えられるので、約数の個数がちょうど N 個であるような最小の自然数を求めよ。

Input

1つの自然数 N が 1 行で与えられる。

Constraints

1 ≤ N ≤ 12

Output

約数の個数がちょうど N 個であるような最小の自然数を1行に出力せよ。

Sample Input 1

1

Sample Output 1

1

Sample Input 2

2

Sample Output 2

2

Sample Input 3

3

Sample Output 3

4
Array Update

Problem

項数 N、初項 a、公差 d の等差数列 A がある。以下の形式で数列を更新する命令文が M 個与えられるので、与えられた順序で数列 A を M 回更新したときの K 項目の値を求めよ。

i 番目の命令文は3つの整数 xi , yi , zi で表される(1 ≤ i ≤ M)。

xiが0だった場合、yi項目の値と
zi項目の値を入れ替える。

xiが1だった場合、yi項目の値を
zi項目の値に書き換える。

Input

N
a d
M
x1 y1 z1
x2 y2 z2
...
xM yM zM
K

1行目に、1つの整数 N が与えられる。
2行目に、2つの整数 a と d が空白区切りで与えられる。
3行目に、1つの整数 M が与えられる。

4行目からの M 行のうち i 行目には i 番目の命令文を表す 3 つの整数 xi, yi, zi が空白区切りで与えられる。

最後の行に、1つの整数 K が与えられる。

Constraints

1 ≤ N ≤ 108

1 ≤ a ≤ 5

1 ≤ d ≤ 5

1 ≤ M ≤ 10

0 ≤ xi ≤ 1 (1 ≤ i ≤ M)

1 ≤ yi ≤ N (1 ≤ i ≤ M)

1 ≤ zi ≤ N (1 ≤ i ≤ M)

yi ≠ zi (1 ≤ i ≤ M)

1 ≤ K ≤ N

Output

入力で与えられた順番で数列AをM回更新したときのK項目を出力せよ。

Sample Input 1

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

Sample Output 1

11

{ 2 , 5 , 8 , 11 , 14 }

↓

0 2 5 … 2項目の値と5項目の値を入れ替える

↓

{ 2 , 14 , 8 , 11 , 5 }

↓

0 3 5 … 3項目の値と5項目の値を入れ替える

↓

{ 2 , 14 , 5 , 11 , 8 }

↓

1 2 4 … 2項目の値を4項目の値に書き換える

↓

{ 2 , 11 , 5 , 11 , 8 }

よって2項目は11である。

Sample Input 2

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

Sample Output 2

15
String Compression

Problem

アルファベットの小文字と数字からなる文字列 S が与えられる。次の手順で文字列 S の長さを圧縮する。

文字列内の文字の順番を任意の順番に入れ替える。

例: "0ig3he12fz99" → "efghiz012399"

次の操作を任意の回数行う。

文字列内にある、"abcdefghijklmnopqrstuvwxyz"の連続した部分文字列を選び、(先頭の文字)'-'(末尾の文字)に置き換える。

例: "efghiz012399" → "e-iz012399"

文字列内にある、公差が1であるような数字列("0123456789"の連続した部分文字列)を選び、(先頭の数字)'-'(末尾の数字)に置き換える。

例: "e-iz012399" → "e-iz0-399"

文字列 S を圧縮して得られる文字列の長さの最小値を求めよ。

Input

文字列 S が１行で与えられる。

Constraints

1 ≤ |S| ≤ 100

文字列Sはアルファベットの小文字と数字のみを含む

Output

文字列 S を圧縮して得られる文字列の長さの最小値を1行に出力せよ。圧縮できない場合は元の文字列 S の長さを出力せよ。

Sample Input 1

0ig3he12fz99

Sample Output 1

9

Sample Input 2

1122334455

Sample Output 2

6
Squid Ink

Problem

近年、イカたちの間では縄張り争いが頻繁に起きている。複数のイカたちがチームを組み、自らのイカスミを武器に戦うのが近年のイカの戦闘スタイルである。

現在も縄張り争いが起こっており、その戦場は R×C のグリッドで表される。縄張り争いに参加しているイカのゲソ太はこのグリッド上のある場所にいる。この争いでは、重要な場所を敵よりも早く占拠することで戦況を有利にすることができる。そのため、ゲソ太は重要そうな場所を1つ決め、そこになるべく早く移動したいと考えている。

ゲソ太は隣接する上下左右のマスに移動することができる。グリッドの各マスには味方、または敵のイカスミが塗られている場合がある。なにも塗られていないマスに移動する場合、2秒かかるが、味方のイカスミが塗られているマスに移動する場合、その半分の時間(1秒)で済む。敵のイカスミが塗られているマスには移動することができない。壁があるマスや戦場の外へは当然移動することができない。

また、ゲソ太は上下左右のいずれかの方向を向き、イカスミを吐くことができる。すると、前方の3マスが味方のイカスミで上書きされる。ただし途中に壁がある場合はその手前までしかイカスミは届かない。この動作には2秒かかる。

戦場の情報とゲソ太の位置と目的の位置が与えられるので、最短で何秒で移動できるか求めてほしい。

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行に戦場の情報としてC個のマスの情報が与えられる。ai,jは戦場の位置(i,j)のマスの情報を表し、以下のいずれかの文字である。

'.': なにも塗られていないマス

'#': 壁

'o': 味方のイカスミが塗られているマス

'x': 敵のイカスミが塗られているマス

'S': ゲソ太の位置(入力中に1つだけ存在し、マスはなにも塗られていない)

'G': 目的の位置(入力中に1つだけ存在し、マスはなにも塗られていない)

与えられる入力は、目的の位置まで移動することが可能であることが保証される。

Constraints

2 ≤ R,C ≤ 30

Output

ゲソ太が目的の位置まで移動するのにかかる最短の秒数を1行に出力せよ。

Sample Input 1

5 5
S....
.....
.....
.....
....G

Sample Output 1

14

Sample Input 2

5 5
Sxxxx
xxxxx
xxxxx
xxxxx
xxxxG

Sample Output 2

15

Sample Input 3

4 5
S#...
.#.#.
.#.#.
...#G

Sample Output 3

23

Sample Input 4

4 5
S#ooo
o#o#o
o#o#o
ooo#G

Sample Output 4

14

Sample Input 5

4 5
G####
ooxoo
##x#o
Soooo

Sample Output 5

10
Movie

Problem

太郎君は夏休みの間、毎日１つの映画を近所の映画館で見ることにしました。
（太郎君の夏休みは8月1日から8月31日までの31日間あります。）

その映画館では、夏休みの間にn つの映画が上映されることになっています。
それぞれの映画には 1 から n までの番号が割り当てられており、i 番目の映画は8月 ai 日から8月 bi 日の間だけ上映されます。

太郎君は映画を見た時、それが初めて見る映画だった場合は 100 の幸福度を得ることができます。
しかし、過去に 1 度でも見たことのある映画だった場合は 50 の幸福度を得ます。

太郎君は上映される映画の予定表をもとに、夏休みの計画を立てることにしました。
太郎君が得られる幸福度の合計値が最大になるように映画を見たときの合計値を求めてください。

どの日も必ず1つ以上の映画が上映されていることが保証されます。

Input

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

n
a1 b1
a2 b2
...
an bn

1行目に、1つの整数 n が与えられる。
2行目からの n 行のうち i 行目には 2 つの整数 ai, bi が空白区切りで与えられる。

Constraints

1 ≤ n ≤ 100

1 ≤ ai ≤ bi ≤ 31 (1 ≤ i ≤ n)

Output

太郎君の得られる幸福度の合計値の最大値を出力せよ。

Sample Input 1

4
1 31
2 2
2 3
3 3

Sample Output 1

1700

Sample Input 2

5
1 10
10 20
20 21
22 31
4 20

Sample Output 2

1800
Lucky Number

Problem

0 から N-1 までの数字があります。 M+1日間のラッキーナンバーを以下の方法で選びたいと思います。 最初の日にラッキーナンバーをランダムに決めます。 i日後のラッキーナンバーを A 、（i+1）日後のラッキーナンバーを B とすると、

B = ( A + j ) % N
（ただし j は 0 ≤ j < N かつ （j / K） が偶数となる全ての整数である )

で求められるBのうちのいずれかからランダムに決めます。ただし、a / b の結果は小数点以下を切り捨てた整数とし、a%bはaをbで割った余りとします。
また K は N / K が割り切れて、N / K が偶数となる数字であることが保証されます。

例えば 0,1,2,3 と数字があり、 K = 1 のとき

0 の次のラッキーナンバーは 0 or 2

1 の次のラッキーナンバーは 1 or 3

2 の次のラッキーナンバーは 0 or 2

3 の次のラッキーナンバーは 1 or 3

となります。

次にQ個の質問が与えられます。 各質問の内容は以下のとおりです。

最初の日のラッキーナンバーが a のとき b 日後のラッキーナンバーが c になるような b 日後までのラッキーナンバーの選び方は何通りでしょうか？
選び方は膨大な数になると思われるので 1,000,000,007 で割った余りを求めてください。

例えば、N=4 K=1 で、最初のラッキーナンバーが 0 で　3 日後のラッキーナンバーが 2 になるような組み合わせは

0 → 0 → 0 → 2

0 → 0 → 2 → 2

0 → 2 → 0 → 2

0 → 2 → 2 → 2

の４通りです。

Input

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

N M K Q
a1 b1 c1
a2 b2 c2
.
.
.
aQ bQ cQ

Constraints

1 ≤ N ≤ 5000

1 ≤ M ≤ 5000

1 ≤ K ≤ 5000

N / K が割り切れる

N / K は偶数

1 ≤ Q ≤ 100000

0 ≤ ai < N ( 1 ≤ i ≤ Q )

0 ≤ bi ≤ M ( 1 ≤ i ≤ Q )

0 ≤ ci < N ( 1 ≤ i ≤ Q )

Output

各質問に対し、答えを求め 1,000,000,007 で割った余りを一行ずつ順番に出力してください。

Sample Input1

6 3 1 10
0 1 0
0 2 0
0 3 0
1 3 3
0 2 1
2 2 2
2 3 2
2 2 0
1 1 1
2 2 1

Sample Output1

1
3
9
9
0
3
9
3
1
0
String Conversion

Problem

ジェニファーとマリアンはカーラに文字列Sをプレゼントしました。

しかし、カーラは文字列Sをもらっても嬉しくありません。

文字列Tが欲しかったのです。

3人は協力して文字列Sを文字列Tに変えることにしました。

最初にジェニファーが文字を任意の順番に並び替えます。

次にマリアンが２種類のアルファベットの小文字を交換することを任意の回数行います。

この操作では、例えば以下のように、文字列中の同じ文字が全て交換されます。

aab → aとbを交換 → bba

aab → aとcを交換 → ccb

最後にカーラがある1文字を別の1文字に置換することをTになるまで繰り返します。

ジェニファーとマリアンはカーラの置換回数が少なくなるようにしてあげることにしました。

カーラが行う置換の回数の最小値を求めてください。

Input

n
S
T

1行目に文字列の長さnが与えられる。

2行目に文字列S、3行目に文字列Tが与えられる。

Constraints

1 ≤ n ≤ 105

S,Tは'a'~'z'のみを含む

|S| = |T| = n

Output

カーラの最少の置換回数を1行に出力せよ。

Sample Input 1

3
abc
xyz

Sample Output 1

0

Sample Input 2

5
aaabb
xyxyz

Sample Output 2

1
Bomb Removal

Problem

縦H×横Wのグリッド上にN個の点火された導火線とそれぞれに対する1つの爆弾が配置されている。それぞれの導火線と爆弾は、Li個のマスからなるpathi上に配置され、pathiのj番目のマスを(pxij, pyij)とする。各爆弾はpathiの最後のマス(pxiLi, pyiLi)に存在する。導火線の火は初期状態(0秒時点)でマス(pxi1, pyi1)にあり、1秒間に1マス進む((pxi1, pyi1),(pxi2, pyi2),...,(pxiLi, pyiLi)の順に進む)。

最初、ロボットがマス(sx, sy) にいる。このロボットは今いるマスの隣接する8方向のマスに1進む、または、そのマスに留まるのに1秒かかる。ただし、グリッドの外や爆弾のあるマスには移動することができない。ロボットは導火線の火があるマス上にいるとき消火することができる(同じマスに2つ以上の導火線の火がある場合はそれら全てを消すことができる)。

爆弾は導火線の火がマス(pxiLi, pyiLi)に到達したときに爆発する(pathiの途中で導火線の火がマス(pxiLi, pyiLi)を通過したときは爆弾は爆発しない)。
全ての爆弾を爆発させずに全ての導火線の火を消火させるための最短の時間を出力せよ。ただし、どのように移動しても爆弾を爆発させてしまう場合は-1を出力せよ。なお、初期状態(0秒時点)でロボットが導火線の火の上にいる場合、消火することができる。

Input

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

W H N
sx sy
L1 path1
L2 path2
...
LN pathN

1行目に3つの整数W, H, Nが空白区切りで与えられる。2行目に2つの整数sx, syが空白区切りで与えられる。3行目からN+2行目に Li と pathi が与えられる。pathi は以下の形式で与えられる。

pxi1 pyi1 pxi2 pyi2 ... pxiLi pyiLi

Constraints

2 ≤ H,W ≤ 20

1 ≤ N ≤ 5

1 ≤ sx ≤ W

1 ≤ sy ≤ H

2 ≤ Li ≤ H+W

1 ≤ pxij ≤ W

1 ≤ pyij ≤ H

pathiの隣り合うマスは上下左右に隣接している。

導火線は互いに独立している(他の導火線に影響しない)。

爆弾はマス(sx, sy)には置かれない。

Output

ロボットが全ての導火線の火を消火させるための最短時間または -1 を出力せよ。

Sample Input 1

2 2 1
2 1
3 1 1 1 2 2 2

Sample Output 1

1

サンプル1に対応する図は以下の通りである。

ロボットは1秒後に左下の(1, 2)のマスに移動することにより消火することができる。

Sample Input 2

2 2 1
2 1
2 1 1 1 2

Sample Output 2

-1

サンプル2に対応する図は以下の通りである。

ロボットは、(1, 1)または(2, 2)のマスに移動する、または今いるマス(2, 1)に留まることができるがいずれにせよ1秒後に爆弾が爆発してしまう。

Sample Input 3

3 3 2
1 3
3 2 3 2 2 2 1
5 2 1 1 1 1 2 2 2 3 2

Sample Output 3

2

サンプル3に対応する図は以下の通りである。

ロボットは、(2, 2)のマスに移動し、(1, 2)のマスに移動することにより2秒で全ての導火線の火を消火することができる。

Sample Input 4

3 3 1
2 2
2 2 2 2 1

Sample Output 4

0

ロボットは、初期状態(0秒時点)で(2, 2)のマスにいて、導火線の火も(2, 2)のマスにあるので0秒で消火することができる。