alexjercan/bugnet huggingface dataset:
Problem G: 挨拶の多い本屋さん

なつめは大のねこ好きである。なつめはある日、いつも親しくしている野良ねこたちから、ねこたちが開いている不思議な本屋に行こうと誘われた。その本屋ではたくさんのねこの写真が載った本が売られていると聞き、なつめは喜んでついていくことにした。

なつめは知らなかったのだが、ねこたちに連れられていった本屋は全国にチェーン店を持つ有名店であった。その店ではしっかりとした店員用マニュアルが用意されており、どの店舗でも店員の行動が統一されている。以下はそのマニュアルからの抜粋である。

店員からユークリッド距離10以内のドアからお客様が入店された際には、 X 秒間かけて大声で「いらっしゃいませこんにちは」といわなければならない。

ユークリッド距離50以内の他の店員が「いらっしゃいませこんにちは」と言っているのを聞いた店員は、その「いらっしゃいませこんにちは」の発声終了時に「いらっしゃいませこんにちは」と X 秒かけて大声で復唱しなければならない。ただし、この復唱の発声開始時から過去 Y 秒以内に、別の「いらっしゃいませこんにちは」を発声完了していた店員は、復唱してはならない。

X, Y, 客の位置、店員の配置が与えられるので、客が入ってから店が静かになるまで何秒かかるか計算せよ。復唱が鳴り止まない場合は、"You're always welcome!"と出力せよ。

Input

入力の1行目には、店員の数 N、およびマニュアルに書かれている X, Y がそれぞれ1つの空白文字で区切られて与えられる。2行目はなつめが入店する位置であり、それに続く N 行は N 人の店員の位置を表す座標である。それぞれの位置は x, y 座標を1つの空白文字で区切って与えられ、各数値とも0以上1000以下の整数で与えられる。また、1 <= N <= 1000, 1 <= X, Y <= 100を満たす。

Output

復唱が鳴り止む場合は客が入店してから静かになるまでの時間を、鳴り止まない場合は "You're always welcome!" を1行に出力せよ。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

4
3 3 5
0 0
10 0
40 40
40 90
4 5 10
100 100
50 100
50 150
100 50
100 150
4 60 10
100 100
90 100
110 100
100 90
100 110
4 60 10
100 100
80 100
110 100
100 80
100 110

Output for the Sample Input

9
0
60
You're always welcome!
Problem H: あみだくじ

なつめは大のねこ好きである。なつめは今日も日課としている野良ねこのブラッシングをするために，いつも野良ねこが集まってくる校庭の一角に向かうことにした。

そのスポットに今日は n 匹のねこが集まってきた。なつめは全員をブラッシングしてやりたかったのだが，ちょうどそこに来る直前に突然用事が出来てしまい，時間的に一匹しかブラッシングしてやれないことになってしまった。ブラッシングはどのねこも楽しみにしているので，一匹だけやると他のねこが嫉妬してしまう。そこでねこたちを納得させるために，どのねこをブラッシングするかをあみだくじで決めることにした。

あみだくじは n 本の縦線とあらかじめ引いた m 本の横線からなる。横線はとなりあう2本の縦線をそれらと垂直になるように結ばなければならない。また，横線同士が端点を共有してはいけない。ある1本の縦線の下端には当たりのマークがつけてある。これらの条件を満たすあみだくじの例を図に示す（これらはサンプル入力の例と対応している）。

図: 問題の条件をみたすあみだくじの例

ねこたちはそれぞれ縦線の上端からどれか1つを選ぶ。そしてあみだくじを辿った結果，当たりをひいたねこが，今日のブラッシングをしてもらう権利を手に入れることができる，というルールである。なつめは早速あみだくじを作成した。縦線・横線・当たりを書き込み，横線が見えないように隠した。

いよいよねこたちに選んでもらおうという時になって，なつめは n 匹のねこの中に，普段は顔を見せない野良ねこのアクタガワがいることに気がついた。アクタガワはもう一ヶ月ほどブラッシングをしておらず，毛がごわごわしている。

なつめは他のねこたちには申し訳ないと思いながらも，ズルをしてアクタガワをブラッシングするように仕組むことにした。まず，ねこたちにそれぞれ普通通り縦線を選んでもらう。全員が選び終わったらなつめはこっそりといくつかの横線を追加し，アクタガワが当たるようにあみだくじを変更するのだ。

しかし，アクタガワが選んだ縦線によってはアクタガワを当たりにするために新たに引かなければならない横線が多すぎて，細工をしている間にねこたちに計画がバレてしまうかもしれない。そこでなつめはまずそれぞれの縦線について，アクタガワがそれを選んだ場合に何本の横線を引けば当たりにすることができるかを求めることにした。

なお，新たに引く横線も，となりあう2本の縦線をそれらと垂直に結ばなければならず，横線同士が端点を共有しないように引かなければならない。

Input

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

n m k

h1 x1

h2 x2

...

hm xm

入力の一行目には縦線の本数 n (1 ≤ n ≤ 100000)，すでに引かれている横線の本数 m (0 ≤ m ≤ 100000)，当たりの縦線の番号 k (1 ≤ k ≤ n) が与えられる。ここで，縦線の番号は，左から順に，1, 2, ..., n とする。

続く m 行には横線の情報が与えられる。各行は一つの横線の情報を表す二つの整数 h (1 ≤ h ≤ 1000000) 及び x (1 ≤ x ≤ n - 1) が与えられる。h は縦線の下端からの距離，x は横線によって結ばれる縦線のうち，左側の縦線の番号である。つまり，この横線は x 番目と x+1 番目の縦線を結ぶことになる。

なお、入力では横線は整数高さの位置にしか存在しないが、新たに追加する横棒の位置は必ずしも整数高さでなくてもよい。

Output

n 行の文字列を出力せよ。 i (1 ≤ i ≤ n) 行目には，アクタガワが i 番目の縦線を選んだときに，アクタガワを当たりにするために追加する必要がある横線の最小本数を出力せよ。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

4
3 2 1
20 1
10 2
5 7 3
70 1
60 4
50 2
40 4
30 1
20 3
10 2
1 0 1
4 2 1
10 1
10 3

Output for the Sample Input

1
0
1
1
0
1
1
2
0
1
0
1
2
Problem I: 夏への扉

なつめは大のねこ好きである。なつめの家ではずっとねこを飼っておらず、ねこ好きななつめはいつも野良ねこと遊んでいた。しかし、今回なつめは決心し、自分の家でねこを一匹飼うことにした。なつめはねこを家に迎え、レノンと名付けてかわいがり始めた。

なつめの家はたくさんの部屋と、それらをつなぐたくさんの扉からなっており、扉は次の2種類がある。

人間用の普通の扉

なつめは開けることができるが、レノンが自分で開けることはできない。なつめとレノンの両方が通ることができる。一度開ければ、その後は開いたままにしておける。

ねこ用の小さな扉

レノンが自分であけて自由に通ることができる。ただし小さいために、なつめが通ることはできない。

レノンは夏が大好きである。だから、冬になり家の外がまっしろな雪で覆われてしまう頃になると、彼の機嫌はとても悪くなってしまった。しかし、彼は家にたくさんあるドアのうち、あるひとつの扉が「夏」へとつながっていると信じているようだった。なつめはその扉を「夏への扉」と呼んでいる。そして、寒くて不機嫌になってくると、レノンはきまってその扉の向こうへ行きたがるのである。

冬のある日、レノンがまた「夏への扉」の奥へ行こうと思い立った。しかし、レノンがひとりで扉を開けて、夏への扉の奥へ行けるとは限らない。その時はもちろん、なつめはレノンの手伝いをしなければならない。つまり、なつめしか開けることの出来ない扉をいくつか開いて、レノンが「夏への扉」の向こう側へ行けるようにしてあげるのだ。

最初、家の中の全ての扉は閉まっている。家の部屋の接続関係、なつめおよびレノンの初期位置が与えられる。なつめとレノンが最適な戦略をとった時、レノンが「夏への扉」の先へいくためになつめが開けなければならない扉の最小数を計算しなさい。

以下の図は、サンプル入力の例を図示したものである。

図: サンプル入力の初期状態

Input

入力の1行目には、部屋の数 n と扉の数 m が1つの空白文字で区切って与えられる。部屋にはそれぞれ 0 から n の番号が割り振られており、0は「夏への扉」の先をあらわす。2行目はなつめが最初にいる部屋の番号とレノンが最初にいる部屋の番号が、1つの空白文字で区切って与えられる。どちらの部屋番号も1以上であり、最初から「夏への扉」の先にいることはない。続く m 行には、m 枚の扉の情報がそれぞれ1行ずつ与えられる。各行はふたつの部屋IDと扉の種類を表す1文字のアルファベットからなり、1つの空白文字で区切られている。扉は指定されたふたつの部屋を繋いでおり、種類はアルファベットが N のとき人間用の普通の扉、L のときねこ用の小さな扉である。扉が同じ部屋同士を繋ぐことはない。部屋IDが0のものを含む扉が「夏への扉」であり、これは入力中に必ずただ1つ存在する。1 <= n, m <= 100000を満たす。

Output

なつめが開けなければならない扉の最小数を、1行で出力せよ。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

2
4 6
1 2
1 2 N
2 3 N
3 4 N
4 1 N
1 4 L
4 0 L
4 6
1 2
1 2 N
2 3 N
3 4 N
4 1 N
1 4 L
4 0 N

Output for the Sample Input

1
3
Problem J: ねこ泥棒と金曜日のお屋敷

なつめは大のねこ好きである。なつめの通学路には通称ねこ屋敷と呼ばれている家がある。その家はたくさんのねこを飼っていることで有名で、なつめは通学途中によくこの家の前で飼いねこに遭遇し、一緒に遊んでいた。そんなある日、なつめは衝撃的な事実を知ってしまった。それは、実はねこ屋敷の主人は、機嫌が悪くなるとよく飼いねこたちを虐待している、ということだった。ねこ屋敷の主人を許せなくなったなつめは、ねこたちを救うため、主人の居ない間にねこたちを盗みだすことにした。

なつめはねこ屋敷の主人の行動パターンを観察し、毎週決まって出掛けているタイミングをねらってねこたちを盗みだすことにした。ねこ屋敷は二次元平面として表わされており、なつめが屋敷の中に忍びこむ時点でのそれぞれのねこの位置は分かっている。ねこたちはそれぞれ決まったルートを常に50メートル毎分のスピードでまわっている。一方、なつめは最大80メートル毎分のスピードで移動できる。なつめは屋敷のとある場所から侵入し、屋敷内を移動し、主人が帰ってくるまでに脱出口から出る。なつめがねこと同じ地点に到達すると、なつめはねこを抱えることができる。これを行なうのにかかる時間は無視できる。なつめは何匹でもねこを抱えることができるし、何匹抱えていても移動速度が落ちることはないが、必ず主人が帰ってくる前に屋敷を脱出しなければならない。

残念ながら、なつめはねこ屋敷のねこを全員盗みだすことはできないかもしれない。しかし、1匹でも多くのねこを幸せにするために、できるだけ多くのねこを盗みだすことにした。また、同じ数のねこを盗みだせるのであれば、屋敷の主人に捕まるリスクを抑えるため、できるだけ早い時間に屋敷から脱出する。

なつめが屋敷に侵入する時刻と位置、屋敷の主人が戻ってくる時刻、脱出口の場所、およびねこの初期位置と巡回ルートが与えられる。なつめが何匹のねこを盗みだして、どの時刻に屋敷を脱出できるかを答えるプログラムを書いてほしい。

Input

入力の1行目には、侵入口の x, y 座標が1つの空白文字で区切られて与えられる。2行目には同様に脱出口の位置が与えられる。3行目にはなつめが屋敷に侵入した時刻、4行目には屋敷の主人が帰ってくる時刻が24時間制のHH:MM:SSの形式で与えられる。

5行目はねこの総数 m であり、続く m 行に各ねこの行動パターンが与えられる。5+i 行目 (i = 1, 2, ..., m) が i 番目のねこの巡回ルートに対応している。各行の初めには自然数 ki が与えられ、続いてねこの巡回ルートが ki 個の x, y 座標値を並べたものとして与えられる。ねこの巡回ルートは、これらの連続する点および最後と最初の点を線分でつないだものである。なつめが屋敷に侵入した時点で、ねこは与えられた最初の点におり、以降ずっと巡回ルート上を等速で移動する。与えられたルートの連続する点が同じ座標であることはない。

なお、スタート時間とゴール時間は同じ日でのものであることが保証されている．なつめが主人の帰ってくる前に脱出する方法は必ず存在する。同じ行にある数は全て1つの空白文字で区切られている。

ねこの数は1以上14以下、ねこの巡回ルートを表わす点の数は2以上1000以下であり、全ての座標値は絶対値が100000を越えない整数であることが保証されている。
座標値の単位は全てメートルである。

Output

1行目に、なつめが盗み出すことのできるねこの最大数を出力せよ。2行目には、なつめがなるべく多い数のねこを盗みだす方法の中で、最も早く脱出口に到達できる時刻を、HH MM SS.nnnnnn (空白区切り)の形式で答えよ。秒の小数点以下は6桁出力せよ。なお、10-6 秒を越える誤差があってはならない。

なお、主人の帰ってくる時間が±1ms変化しても、最多遭遇可能数は変化しないことが保証されている。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

2
0 0
0 0
15:00:00
18:00:00
1
4 0 7199 1125 7199 1125 8324 0 8324
0 0
0 0
15:00:00
18:00:00
1
4 0 7201 1125 7201 1125 8326 0 8326

Output for the Sample Input

1
17 59 59.076923
0
15 00 00.000000
Problem K: Cat Numbers!

ねこのアリストテレスは数学の問題を考えるのを趣味にしている。今彼が考えている問題は以下のようなものである。

1以上の自然数 A, B (A < B) に対して、A から B までの自然数の和を C、A と B を十進表記して A, B の順に結合したものを D とすると、両者が等しくなることがある。たとえば1から5までの和は15、2から7までの和は27、7から119までの和は 7119、といった具合である。このような A と B のペアのことを cat numbers と呼ぶことにする。アリストテレスは、A と B の桁数が与えられたときに、cat numbersを全て列挙したい、と考えた。

アリストテレスは、A または B を固定した場合に解が存在するかどうかを確かめる方法は思いついたので、小さい桁数に対しては答えを得ることができた。しかし、桁数が大きくなるにしたがって計算をするのが大変になり、途中でうんざりして投げ出してしまった。そこで、あなたにお願いがある。アリストテレスに代わって、指定された桁数のcat numbersを全て列挙するプログラムを書いてほしい。

Input

入力は1行のみからなる。A の桁数 a および B の桁数 b が1つの空白文字で区切られて与えられる。これらは 1 ≤ a ≤ b ≤ 16 を満たす。

Output

指定された桁数のcat numbersを、A が小さいものから順に出力せよ。A が同じものが複数ある場合は、B が小さいものから出力せよ。各行には1つのcat numbersにおける A と B を1つの空白文字で区切ったものを出力せよ。また、条件に合うcat numbersが存在しない場合は "No cats." と1行に出力せよ。

Notes on Submission

上記形式で複数のデータセットが与えられます。入力データの 1 行目にデータセットの数が与えられます。各データセットに対する出力を上記形式で順番に出力するプログラムを作成して下さい。

Sample Input

4
1 1
1 3
1 4
2 2

Output for the Sample Input

1 5
2 7
7 119
No cats.
13 53
18 63
33 88
35 91
Problem A: Sum of Consecutive Integers

あなたは数か月に渡る受験戦争を勝ち抜き，晴れてICPC大学に入学することができた．入学手続きの日，大学のキャンパス内では熱狂的なサークルの勧誘活動が行われており，あなたは大量のパンフレットを受け取って帰ってきた．部屋に戻ってきたあなたは受け取ったパンフレットの中から気になる一枚を見つけた．そのパンフレットは大学の広報部から渡されたものだった．

パンフレットには以下のような問題が記されていた．

和が N となるような，連続する2つ以上の正の整数の組み合わせは，何組存在するでしょうか？例えば， 9 は 2+3+4 と 4+5 の 2通りの組み合わせがあります．

この問題の答えが気になったあなたは，プログラムを書いてその答えを調べることにした．したがって，あなたの仕事は，入力として与えられる正の整数 N に対して，問題の答えを出力するプログラムを書くことである．

Input

入力はデータセットの並びである．各データセットはひとつの整数 N からなる一行である．ここで 1 ≤ N ≤ 1000 である．

入力の終りは，ひとつのゼロからなる一行で示される．

Output

出力は，入力の各データセットの表す正の整数に対する問題の答えを，入力データセットの順序通りに並べたものである．それ以外の文字が出力にあってはならない．

Sample Input

9
500
0

Output for the Sample Input

2
3
Problem B: Moonlight Farm

あなたは大人気webゲーム「ムーンライト牧場」に熱中している．このゲームの目的は，畑で作物を育て，それらを売却して収入を得て，その収入によって牧場を大きくしていくことである．

あなたは速く畑を大きくしたいと考えた．そこで手始めにゲーム中で育てることのできる作物を，時間あたりの収入効率にもとづいて並べることにした．

作物を育てるには種を買わなければならない．ここで作物 i の種の名前は Li ，値段は Pi でそれぞれ与えられる．畑に種を植えると時間 Ai 後に芽が出る．芽が出てから時間 Bi 後に若葉が出る．若葉が出てから時間 Ci 後に葉が茂る．葉が茂ってから時間 Di 後に花が咲く．花が咲いてから時間 Ei 後に実が成る．一つの種から Fi 個の実が成り，それらの実は一つあたりSi の価格で売れる．一部の作物は多期作であり，計 Mi 回実をつける．単期作の場合は Mi = 1で表される．多期作の作物は，Mi 回目の実が成るまでは，実が成ったあと葉に戻る．ある種に対する収入は，その種から成った全ての実を売った金額から，種の値段を引いた値である．また，その種の収入効率は，その収入を，種を植えてから全ての実が成り終わるまでの時間で割った値である．

あなたの仕事は，入力として与えられる作物の情報に対して，それらを収入効率の降順に並べ替えて出力するプログラムを書くことである．

Input

入力はデータセットの列であり，各データセットは次のような形式で与えられる．

N

L1 P1 A1 B1
C1 D1 E1 F1
S1 M1

L2 P2 A2 B2
C2 D2 E2 F2
S2 M2

...

LN PN AN BN
CN DN EN FN
SN MN

一行目はデータセットに含まれる作物の数 N である (1 ≤ N ≤ 50)．

これに続く N 行には，各行に一つの作物の情報が含まれる．各変数の意味は問題文中で述べた通りである．作物の名前 Li はアルファベット小文字のみからなる20文字以内の文字列であり，また 1 ≤ Pi , Ai , Bi , Ci , Di , Ei , Fi , Si ≤ 100, 1 ≤ Mi ≤ 5である．一つのケース内に同一の名前を持つ作物は存在しないと仮定して良い．

入力の終りはゼロを一つだけ含む行で表される．

Output

各データセットについて，各行に一つ，作物の名前を収入効率の降順に出力せよ．収入効率が同じ作物に対しては，それらの名前を辞書順の昇順に出力せよ．

各データセットの出力の後には“#”のみからなる1行を出力すること．

Sample Input

5
apple 1 1 1 1 1 1 1 10 1
banana 1 2 2 2 2 2 1 10 1
carrot 1 2 2 2 2 2 1 10 2
durian 1 3 3 3 3 3 1 10 1
eggplant 1 3 3 3 3 3 1 100 1
4
enoki 1 3 3 3 3 3 1 10 1
tomato 1 3 3 3 3 3 1 10 1
potato 1 3 3 3 3 3 1 10 1
onion 1 3 3 3 3 3 1 10 1
3
a 10 1 1 1 1 1 1 10 1
b 10 2 2 2 2 2 2 10 1
c 10 2 2 2 2 2 2 10 1
0

Output for the Sample Input

eggplant
apple
carrot
banana
durian
#
enoki
onion
potato
tomato
#
b
c
a
#
Problem C: Differential Pulse Code Modulation

差分パルス符号変調は主に音声信号を圧縮する際に用いられる圧縮手法の一つである．

音声信号は計算機上では整数列(インパルス列)として扱われる．整数列は入力信号を一定時間間隔で標本化(サンプリング)し，振幅を記録したものである．一般にこの整数列は前後の値が近いという傾向がある．これを利用し，前後の値の差分を符号化し，圧縮率を向上させるのが差分パルス符号変調である．

本問題では差分の値をあらかじめ定められた値の集合から選ぶことを考える．この値の集合をコードブックと呼ぶことにする．復号化後の音声信号
yn は以下の式で定められる．

yn = yn
- 1 + C[kn]

ここで kn はプログラムによって出力される出力系列， C[j]
はコードブックの j 番目の値である．ただし yn
は加算によって0未満の値となった場合は0に，255より大きい値となった場合は255にそれぞれ丸められる．また， y0
の値は128とする．

あなたの仕事は，入力信号とコードブックが与えられたときに，元の入力信号と復号化後の出力信号との差の二乗和が最小となるように出力系列を選んで，そのときの差の二乗和を出力するプログラムを書くことである．

例えば，コードブックとして {4, 2, 1, 0, -1, -2, -4} という値のセットを使って
131, 137 という列を圧縮する場合，
y0 = 128,
y1 = 128 + 4 = 132,
y2 = 132 + 4 = 136 という列に圧縮すると
二乗和が (131 - 132)^2 + (137 - 136)^2 = 2 と最小になる．

また，同じくコードブックとして {4, 2, 1, 0, -1, -2, -4} という値のセットを使って
131, 123 という列を圧縮する場合，
y0 = 128,
y1 = 128 + 1 = 129,
y2 = 129 - 4 = 125 と，先程の例とは違って
131 により近づく +2 を採用しない方が
(131 - 129) ^ 2 + (123 - 125) ^ 2 = 8
というより小さな二乗和が得られる．

上記 2つの例は sample input の最初の 2例である．

Input

入力は複数のデータセットから構成される．各データセットの形式は次に示すとおりである．

N M

C1

C2

...

CM

x1

x2

...

xN

最初の行は，入力データセットの大きさを規定する． N は圧縮する入力信号の長さ(サンプル数)である． M
はコードブックに含まれる値の個数である． N 及び M は1 ≤ N ≤ 20000，1
≤ M ≤ 16を満たす．

これに続く M 行は，コードブックの記述である． Ci はコードブックに含まれる
i 番目の値を表す． Ci は-255 ≤ Ci
≤ 255を満たす．

これに続く N 行は，入力信号の記述である． xi は入力信号を表す整数列の i
番目の値である． xi は0 ≤ xi ≤ 255を満たす．

データセットの中の入力項目は，すべて整数である．入力の終りは，空白文字1個で区切られた2個のゼロのみからなる行で表される．

Output

入力の各データセットに対して， 元の入力信号と復号化後の出力信号との差の二乗和の最小値を一行で出力せよ．

Sample Input

2 7
4
2
1
0
-1
-2
-4
131
137
2 7
4
2
1
0
-1
-2
-4
131
123
10 7
-4
-2
-1
0
1
2
4
132
134
135
134
132
128
124
122
121
122
5 1
255
0
0
0
0
0
4 1
0
255
0
255
0
0 0

Output for the Sample Input

2
8
0
325125
65026
Problem D: Mr. Rito Post Office

あなたは離島の郵便局に勤めるプログラマである．あなたの住んでいる地域は，複数の島々からなる．各島には一つ以上の港町がある．それらに加えて他の町や村があるかもしない．ある島から別の島に向かうためには船を使わなければならない．一つの島の中を回るには陸路が使えるが，海路を利用した方が速いこともある．

近年行われた郵便局の民営化をきっかけに，経費削減に向けて郵便配達員の人員整理が全国的に行われた．離島の郵便局もその例外ではなく，結果として郵便配達員は利藤さんただ一人となってしまった．その郵便局が集配を担当する地域は非常に広いため，一人で集配するのは大変な作業である．なので，どのようにすれば効率的に集配を行えるのか，利藤さんがあなたに助けを求めてきた．

あなたの仕事は，利藤さんがたどるべき町や村の集配順序が与えられたときに，最短巡回経路を求めるプログラムを書くことである．

利藤さんは，決して指定された順序以外で集配業務を行うことができない．しかし，ある町や村から別の町や村へ移動する際に，他の町や村を経由して移動することは許可されている．また，利藤さんは島々を巡るための一隻の船を持っている．

例えば，町A，町B，村Cという集配順序が与えられた場合，町Aから町Bへ向かう際にどの町や村を経由してもかまわない．このとき，村Cを経由しても構わないが，集配順序を守るためには，一度町Bに行って集配をおこなってから，改めて村Cを訪れて集配をおこなわなければならない．また，町Aから海路を用いて町Bに向かい，町Bから陸路を用いて村Cに向かった場合，船を町Bに置いたままになる．したがって，次に海路を使いたい場合は町Bに戻る必要がある．

一つの町や村において複数回集配をしなければならない場合もある．たとえば，町A，村B，町C，村Bという集配順序が与えられるかもしれない．このとき，町Aから村Bをたどらずに町Cに向かった場合は，町Cでいきなり集配をおこなうことはできない．最初の村Bでの集配が終わっていないからである．町Cで集配を済ませた後で村Bを訪れて集配しても，一回目の村Bの集配を終わらせたことにはならない．

利藤さんは，はじめに必ずある港町に船とともにいる．利藤さんはベテランであるため，移動時間以外の集配作業にかかる時間は無視してよい．また，最後の町または村での集配業務が完了するまでの時間だけが問題であり，船をもとの位置に戻して郵便局に帰るまでの時間は考慮しなくてよい．

Input

入力は複数のデータセットから構成される．各データセットの形式は次に示すとおりである．

N M

x1 y1 t1 sl1

x2 y2 t2 sl2

...

xM yM tM slM

R

z1 z2 ... zR

データセットの中の入力項目は，すべて非負の整数である．行中の入力項目の区切りは空白 1 個である．

最初の行は，陸路及び海路網の大きさを規定する．

N (2 ≤ N ≤ 200) は，町または村の数である．
それぞれの町または村には，1 から N までの固有の番号を割り当てる．
M (1 ≤ M ≤ 10000) は，陸路と海路の合計本数である．

2 行目から 1 + M 行目は，陸路または海路の記述である．
xi と yi (1 ≤ xi, yi ≤ N) は両端の町または村の番号を表す．
ti (1 ≤ ti ≤ 1000) はその陸路または海路の移動時間を表す．
sli は ‘L’ または ‘S’ のいずれかであり，Lは陸路を，Sは海路をそれぞれ表す．

ある2つの町や村を直接結ぶ陸路または海路が2本以上存在することがある． それぞれの陸路または海路は双方向であり，すなわちどちらの向きにも移動できる．

M + 2 行目の R (1 ≤ R ≤
1000)は，利藤さんが担当する集配先の数を表す． M + 3 行目には，集配先の町や村の番号 zi (1 ≤ zi ≤ N) が集配順に R 個並んでいる．

初期状態では利藤さんと船はともに港町 z1 に存在する． 初期状態から集配先の町や村へは，必ず何らかの方法で移動することができる．

入力の終わりは，空白で区切られた2つの0を含む1行で示される．

Output

入力の各データセットに対して，与えられた集配順序で利藤さんが町と村を巡回するために必要な最短移動時間を求め，1行に出力せよ．

Sample Input

3 3
1 2 5 L
1 2 7 S
2 3 11 S
3
1 2 3
5 5
1 2 15 L
2 3 10 L
4 5 7 L
1 3 30 S
3 4 100 S
5
1 3 5 4 1
0 0

Output for the Sample Input

18
269
Problem E: Immortal Jewels

English text is not available in this practice contest.

ある時ある貴族が，ある貧乏な国のおてんばで勇敢なお姫様に惚れ込み結婚を申し込んだ．お姫様は貴族にある条件を出した．その条件とは「不死の宝石」と呼ばれている宝石を大量に持ってくることであった．不死の宝石は，ある山の特定の場所でしか取ることができない非常に希少な宝石である．しかも大変壊れやすいため，採取するには特別な方法が必要だった．

不死の宝石は円形をしており，二次元空間上に複数存在している．この宝石を取るには，ある特別な金属の棒でそれらを吸着する必要がある．金属の棒は無限の長さを持つ直線であり，太さは無視することができる．宝石は一つ一つ異なる強さの磁力を持っており，金属がその磁力に反応するほど十分に近ければ宝石は吸着される．具体的には，金属と宝石の表面との距離を d ，宝石の磁力の強さを m としたとき，

0 ≤ d ≤ m

であれば宝石は金属に吸着される．逆に，金属の棒と宝石がその磁力よりも離れている場合は吸着できない．また，棒が少しでも宝石を貫通してしまった場合にも，その宝石が壊れてしまうため吸着できない．

例を見てみよう．下の図は二次元空間上に置かれた宝石の例である．宝石1から宝石6まであり，磁力はそれぞれ1, 0, 1, 1, 1, 2であるとする．

図 E-1: 宝石の配置例

上の図に加えて金属の棒を配置した例が下の図である．宝石を吸着した結果も表に示してある．この例の場合，宝石3は磁力の届く範囲より離れており，また宝石4は棒に貫通されているため吸着できないが，残りの4つは全て吸着することができる．

図 E-2: 金属の棒の配置例

宝石名
磁力
金属との距離
吸着できるか

宝石1
1
約0.21
できる

宝石2
0
0
できる

宝石3
1
約5.37
できない

宝石4
1
貫通している
できない

宝石5
1
約0.97
できる

宝石6
2
約0.53
できる

表 E-3: 吸着結果

貴族は全財産を注ぎ込み，特別な金属の棒を必死に探し求めた．しかしながら，この金属も非常に貴重であったため，結局たった一本しか入手することができなかった．したがって吸着のチャンスはただ一回しか無い．

あなたはある貴族に仕えるプログラマーである．あなたの仕事は，与えられた二次元上の宝石の配置に対して，金属の棒をうまく配置したときに，最大で何個の宝石を吸着することができるかを求めるプログラムを書くことである．

Input

入力は複数のデータセットから成り， 1つのデータセットは以下の形式で与えられる．

N

x1 y1 r1 m1

x2 y2 r2 m2

...

xN yN rN mN

データセットの最初の行は宝石の数 N (1 ≤ N ≤ 50) を表している．続く N 行の各行には4つの整数 xi, yi, ri, mi (-1000 ≤ xi, yi ≤ 1000, 1 ≤ ri ≤ 100, 0 ≤ mi ≤ 100) が記述されており，宝石の位置，大きさ，および磁力を表す．すなわち，宝石 i は中心を(xi, yi)とし半径が ri であるような円形をしており，その磁力は mi である．宝石は互いに重なり合うことは無い．

入力の終わりは，0のみからなる行で表される．

Output

各データセットについて， 一度に吸着することができる宝石の最大数を1行に出力せよ．

Sample Input

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

Output for the Sample Input

4
2
3
3
1
Problem F: Canal: Water Going Up and Down

ACM国には中央を東西に流れる川がある．この川は西の隣国からACM国を通り東の隣国へと流れており，ACM国内の全長は K kmである．この川にいくつかの閘門を設置し，運河として利用することが計画されている．

閘門とは，異なる2つの水位間を船が移動するための仕組みである．閘門は上流側と下流側にそれぞれ水門を持ち，それらの間に閘室と呼ばれる小さな水域を持つ．この閘室に船を入れた後に注水あるいは排水を行い，閘室の水位を上下させることで船も上下させる．以下にその模式図を示す．

図 F-1: 閘門の模式図

この川の川幅はあまり広くないため，西から東へ一方通行の運河となることが決まっている．設計の担当者は，運河を効率良く運用するため，予想される船の航行スケジュールに合わせて閘門の設置場所などを最適にしたいと考えている．

あなたは設計担当者に雇われているプログラマーである．あなたの仕事は，閘門の情報と複数の船の航行スケジュールが与えられたとき，全ての船が川を通過するまでの時間をシミュレーションにより求めるプログラムを書くことである．

各閘門は以下の情報によって表される．

ACM国西端からの距離 X (km)

水位の切り替えに必要な水の容積 L (L)

単位時間あたりの最大注水量 F (L/h)

単位時間あたりの最大排水量 D (L/h)

閘門の西側の水位と東側の水位の上下関係

便宜上，シミュレーションにおいて，川はACM国外においても同様に無限に続いているものとする．

シミュレーションの開始時点において，全ての閘室の水位は東側と西側の水位のうち，低い方にある．また，航行スケジュールに含まれる船は，ACM国の西端を先頭地点として，入力で与えられる順に東から西に向かって1kmおきに並んでいるものとする． 便宜上，先頭の船の初期位置を0km地点とする．

シミュレーション開始とともに船は東に向かって航行を始める．このとき，ある船の前後1km未満に他の船が入ってはならない．
各船にはそれぞれ最大船速 V (km/h)が設定されている．船は一瞬で任意の船速に達し，さらに一瞬で静止することすらできる．基本的に船は最大船速で航行するが，先行する船より後続の船のほうが最大船速が速く，かつ後続の船が先行する船の1km手前に追いついた場合は，後続の船は先行する船と同じ船速で航行する．船及び閘門の大きさは無視できるものとする．

船は，閘門の西側の水位と閘室の水位が等しいときのみ，その閘門に入ることができる．同様に，閘門の東側の水位と閘室の水位が等しいときのみ，その閘門から出ることができる．各閘室の水位は，中に船がいない場合は，その閘門の西側の水位と一致するまで上昇または下降する．また，船がいる場合は，その閘門の東側の水位と一致するまで変位する．閘門の丁度1km先で船が停泊している場合でも，船は閘門から出ることができる．ただし，このとき，船は先行する船が発進するまで閘門から出たところで停泊しなければならない．

船はACM国の東端を通過した後，可能な限りの速度で無限遠まで航行する．全ての船がACM国の東端を通過し終えた時点でシミュレーションは終了する．

Input

入力は複数のデータセットからなる．各データセットは以下の形式で与えられる．

N M K

X1 L1 F1 D1
UD1

X2 L2 F2 D2
UD2

...

XN LN FN DN
UDN

V1

V2

...

VM

最初の1行は3つの整数 N, M, K からなる． N (1 ≤ N ≤ 100) は閘門の数， M (1 ≤ M ≤ 100) は船の数， K (2 ≤ K ≤ 1000) は川のACM国内における全長をそれぞれ表す．

続く N 行は閘門の情報を表す． 各行は5つの整数 Xi, Li, Fi, Di, UDi からなる． Xi (1 ≤ Xi ≤ K - 1) は閘門 i のACM国西端からの位置(km)， Li (1 ≤ Li ≤ 1000) は閘門 i の水位の切り替えに必要な水の容積(L)， Fi (1 ≤ Fi ≤ 1000) は閘門 i の単位時間あたりの最大注水量(L/h)， Di (1 ≤ Di ≤ 1000) は閘門 i の単位時間あたりの最大排水量(L/h)， UDi (UDi ∈ {0, 1})は閘門 i の西側の水位と東側の水位の上下関係をそれぞれ表す．
UDi が 0 の場合，閘門 i は西側より東側が水位が高いことを表す．一方 UDi が 1 の場合，閘門 i は西側より東側が水位が低いことを表す．

続く M 行には，各行に i 番目の船の最大船速(km/h)を表す整数 Vi (1 ≤ Vi ≤ 1000) が与えられる．

閘門は Xi の値の小さい順で与えられる．また，同一の位置に複数の閘門が設置されることはない．

入力の終りはスペースで区切られた3個のゼロからなる．

Output

各データセットに対し，シミュレーション開始から終了までの時刻を1行で出力せよ．出力する値は10-6以下の誤差を含んでいても構わない．値は小数点以下何桁表示しても構わない．

Sample Input

1 1 100
50 200 20 40 0
1
2 4 100
7 4 1 4 1
19 5 1 4 0
5
3
7
9
1 2 3
1 1 1 1 0
1
3
1 2 10
5 10 1 1 1
2
3
0 0 0

Output for the Sample Input

110
46.6666666667
5
41.6666666667
Problem G: Magical Island 2

まだ魔法があたりまえのように存在した時代である．ある魔導士の一族は，魔力によって作られた正方形の形の島に住んでいた．

ある時，この島に危機が訪れた．帝国が大陸間弾道魔導ミサイルを開発し，この島を照準に合わせてきたのである．この世界の魔法は地属性，水属性，火属性，風属性などに分類でき，魔導ミサイルもその四つの属性のいずれかに属していた．島の四隅にはそれぞれ地の水晶，水の水晶，火の水晶，風の水晶が配置されていて，水晶に魔力を送り込むことで対応する属性の魔法攻撃を防ぐことがきでる．

魔導士達は帝国が開発した大陸間弾道魔導ミサイルによる攻撃をかろうじて退けることができた．しかし，帝国は新たに闇属性に属する大陸間弾道魔導ミサイルを開発し，再びこの島に攻撃を仕掛けてきた．闇属性に属する魔法はこの島に設置されている水晶で防ぐことはできない．そこで魔導士達は秘術としてこの島に伝えられる光属性の防御陣を用いてミサイルを防ぐ事にした．

この光属性の防御陣はある特定の形状をした魔法陣を大地に描くことにより発動する． 魔法陣は半径 R の円周を M 等分し K 個おきに直線で結んだ図形である．魔法陣は任意の大きさで描くことができるが魔法の発動には方角が重要なので，一つの角が真北を向くように描かなければならない．防御陣の効果が及ぶ範囲は描かれた魔法陣の内部（境界を含む）と一致する．またこの魔法の詠唱に必要なエネルギーは描いた魔法陣の半径 R と等しい．

図G-1は M = 4， K = 1 の場合である．灰色の部分が魔方陣の効果が及ぶ領域である． 図G-2は M = 6， K = 2 の場合である．図のように複数の図形が生じる場合は，それらの図形のいずれかに含まれていれば防御陣としての効果が及ぶ．

図G-1: M = 4 ，K = 1 の場合 小さい丸が集落を表す

図G-2: M = 6 ，K = 2 の場合

あなたの仕事は，集落の位置，および M と K の値が与えられたときに，全ての集落をカバーするために必要となるエネルギーの最低量を求めるプログラムを書くことである．

Input

入力は複数のデータセットからなる． 各データセットは以下の形式で与えられる．

N M K

x1 y1

x2 y2

...

xN yN

最初の一行は 3 つの整数N, M, K からなる． N
は集落の数を表す． M, K については問題文に記したとおりである． 2 ≤ N ≤ 50， 3 ≤ M ≤ 50， 1 ≤ K ≤ (M - 1) / 2を仮定してよい．

続く N 行は集落の位置を表す． 各行は二つの整数 xi と yi
からなる． xi と yi は i 番目の集落のx座標とy座標を表す． -1000 ≤ xi， yi ≤ 1000 を仮定して良い．y軸の正方向が北を指す.

入力の終わりはスペースで区切られた3個のゼロからなる．

Output

各データセットに対し，魔法陣の最小の半径 R を1行に出力せよ． 出力する値は10-6以下の誤差を含んでいても構わない．値は小数点以下何桁表示しても構わない．

Sample Input

4 4 1
1 0
0 1
-1 0
0 -1
5 6 2
1 1
4 4
2 -4
-4 2
1 5
0 0 0

Output for the Sample Input

1.000000000
6.797434948
Problem A: 期末試験!

私立桜が丘女子高等学校に通う平沢唯さんは明後日までに進路希望を出さなければならないのだが、困ったことに進路についてまだ何も決めていなかった。
友人の和に相談したところ、和の第一志望はK大と知り、自分もK大に入れるかどうか進路指導の先生に相談にいった。

相談された進路指導の先生であるあなたは唯さんがK大に入れるかどうかを予想するため唯さんの期末試験の成績を参考にすることにした。
しかし、唯さんは試験の山が当たるかどうかによって大きく成績が左右されるため、過去の期末試験の中で一番良かった時の点数と一番悪かった時の点数を調べることにした。
過去の期末試験のデータは5教科の各点数のみしか残っておらず、試験の合計点数は残っていなかった。
したがってあなたの仕事は各試験の点数データを入力として、過去の期末試験の中で一番良かった時の点数と一番悪かった時の点数を出力するプログラムを書くことである。

Input

n
s11 s12 s13 s14 s15
...
sn1 sn2 sn3 sn4 sn5

n は今までに受けた試験の回数である。試験の回数は1以上100以下である。
続く n 行には各試験における5教科の点数が与えられる。点数の範囲は0以上100以下の整数である。

Output

最高点 最低点を、一行に出力しなさい。最高点と最低点の間は1文字の空白で区切り、これら以外の文字を含んではならない。

Notes on Test Cases

上記入力形式で複数のデータセットが与えられます。各データセットに対して上記出力形式で出力を行うプログラムを作成して下さい。

n が 0 のとき入力の終わりを示します。

Sample Input

3
49 50 87 78 41
27 61 100 45 84
28 88 40 95 66
2
100 100 100 100 100
0 0 0 0 0
1
89 90 85 93 82
0

Output for Sample Input

317 305
500 0
439 439
Problem B: 宝くじチェッカー

あなたは無事進学振り分けを終え、駒場近辺から本郷近辺へ引っ越す準備の最中であった。 家の中を整理していたところ去年購入した宝くじが大量に見つかった。 交換期限を確認したところ明日までに換金しなければならないのだが、引っ越しの準備がまだ全く終わっていないため少額の当選金のために宝くじ売り場まで行くのは面倒である。 そこであなたはいくら当選金が得られるかを調べることにした。

宝くじは8桁の数字からなる。当選番号は同じく8桁で数字と'*'から構成され、持っている宝くじと数字部分が一致した場合、当選番号に応じた当選金が支払われる。

例えば所持している宝くじの番号が "12345678" の場合、当選番号が "*******8" や "****5678" の場合は当選となるが、当選番号が "****4678" のときは当選とはならない。当選番号は複数あり得て、それぞれ独立に当選金が支払われる。ただし、当選番号は1枚の宝くじが2つ以上の当選番号に当たらないように選ばれる。たとえば当選番号が "*******8", "****5678" の2つであった場合、 "12345678" は両方に当選してしまうため、このような当選番号の選ばれ方がされることはない。

あなたの仕事は、入力として与えられる所持している宝くじの番号と宝くじの当選番号に対して、いくらの当選金が得られるかを出力するプログラムを書くことである。

Input

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

n m
N1 M1
...
Nn Mn
B1
...
Bm

1行目では当選番号の数 n (1 ≤ n ≤ 100)と所持している宝くじの枚数 m (1 ≤ m ≤ 1000)がそれぞれ整数で与えられる。

続く n 行では、各行に当選番号 Ni と当選金 Mi (1 ≤ Mi ≤ 1000000)が与えられる。当選金は整数である。当選番号の形式は問題文中で述べたとおりである。

続く m 行では所持している宝くじの番号が与えられる。

Output

当選金の合計額を出力せよ。

Notes on Test Cases

上記入力形式で複数のデータセットが与えられます。各データセットに対して上記出力形式で出力を行うプログラムを作成して下さい。

n が 0 のとき入力の終わりを示します。

Sample Input

3 3
*******1 100
******22 1000
11111112 1000000
01203291
02382022
11111111
10 10
****3228 149416
****3992 198635
****4286 77783
****4843 225244
***49835 231046
***59393 379996
*5763748 437345
*6726222 58054
*8117882 16375
*9244339 537727
77885716
96726222
26971031
66652868
89599648
37772338
64679621
65479161
92959393
57855682
0 0

Output for Sample Input

1200
438050
Problem C: コンパイル

東京大学に入学したきたまさ君はTSG(東大スーパーゲーマーズ)というサークルに入った。

このサークルは毎年、駒場祭でゲームを展示しており、きたまさ君もゲームを作成して展示することにした。

きたまさ君の作成するゲームは次のような、よくある落ち物パズルゲームである。

横6マス×縦12マスの格子状のフィールドがあり、各マスにつき1個のブロックを置くことができる。

上からブロックが2つ1組で落下してくる。ブロックには赤・緑・青・黄・紫の5色の基本ブロックとお邪魔ブロックの計6種類がある。プレイヤーはブロックを回転、横移動により操作し、落下位置を変更することができる。

落下してきたブロックがフィールドの床やほかのブロックに衝突すると、その位置にブロックが固定される。

固定されたブロックと同色のブロックが周囲4方向にある場合、それらは互いにくっつく。ただし、お邪魔ブロックは互いにくっつかない。

ブロックが4個以上くっつくと消滅し得点となる。お邪魔ブロックの周囲4方向に存在する基本ブロックが消滅すると、そのお邪魔ブロックも一緒に消滅する。ブロックの消滅は、全てのブロックの落下が終了したタイミングで同時に起こる。

ブロックの消滅により、その上にあったブロックが落下する。このブロックの落下はプレイヤーが操作できない。このとき再びブロックが4個以上くっつくと消滅し、連鎖が起きる。ただし、複数色を同時に消した場合でも、1連鎖扱いとなる。

きたまさ君はこのゲームの大部分のプログラムを書き終えたが、どうしてもブロックがくっついて消滅したときの処理を書くことが出来なかった。そこでサークルの友人であるあなたにその部分のプログラムを書いてもらうことにした。

Input

入力は12行からなる。

入力の i 行目は長さ6の文字列からなり、その j 文字目はフィールドの上から i 行目、左から j 列目のマスの状態を表している。

マスの状態を表す文字は以下の7つのうちのいずれかである。

文字	種類

R	赤

G	緑

B	青

Y	黄

P	紫

O	お邪魔

.	空きマス

また、入力に含まれる全てのブロックは床の上か他のブロックの上に乗っている。

Output

入力の状態から、ルールに従ってブロックを消していった時の連鎖数を計算し、一行で出力せよ。

ブロックが一つも消えない場合は0と出力せよ。

Notes on Test Cases

上記入力形式で複数のデータセットが与えられます。

入力の1行目にデータセットの数Tが与えられます。

各データセットに対して上記出力形式で出力を行うプログラムを作成して下さい。

Sample Input

3
......
......
......
......
......
......
......
......
.RGB..
RGOP..
RGBPB.
RGBPP.
GBRGYP
GBRRYP
BGGRBB
BPRGYY
GGPRRY
BYPPRB
YGGGPB
GYYYPR
YRBRBR
YBRBRB
BRBRBR
BRBRBR
......
......
......
......
......
......
......
......
......
......
..OO..
..OO..

Output for Sample Input

3
18
0