alexjercan/bugnet huggingface dataset:
品質管理

会津タカダ市が生産販売する布製コースターは、対称なデザインでとても美しいことで知られている。会津タカダ市では品質管理の一環として、製造ラインにカメラを設置し、各コースターを撮影して得られた画像が対称になっているかを自動で検証している。各コースターは N × N ピクセルの正方形の白黒画像として表される。各ピクセルは白または黒の画像に対応して、0 または 1 の値をとる。

この度、生産ラインの機器更新にともなって、画像解析システムのソフトウェアを更新することになった。新システムでは、通信データ量を削減する工夫がなされ、以下の方法でカメラから解析システムにデータが送られてくる。

ラインに流れてくる最初のコースターの情報は、N × N ピクセルの画像としてシステムに送られてくる。

２枚目以降のコースターの情報は、１つ前に送られた画像との差分だけが送られてくる。差分は、「0 から 1 」または「1 から 0 」へと変化したピクセルの位置の集合として与えられる。

C 枚のコースターについて、１枚目の画像のピクセル情報と続く C - 1 枚分の差分情報を入力し、上下対称かつ左右対称となっているコースターの枚数を報告するプログラムを作成せよ。

Input

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

C N
p11p12...p1N
p21p22...p2N
:
pN1pN2...pNN
diff1
diff2
:
diffC−1

１行目にコースターの枚数 C (1 ≤ C ≤ 10000) と画像の縦と横のピクセル数 N (2 ≤ N ≤ 1000 かつ N は偶数) が与えられる。２行目から N + 1 行目に最初のコースターの画像のピクセルを表す N行 × N 列の数字 pij (pij は 0 または 1)が与えられる。

N + 2 行目以降に、２枚目以降のコースターの情報を表す差分 diffi が次の形式で与えられる。

D
r1 c1
r2 c2
:
rD cD

１行目に変化したピクセルの数 D (0 ≤ D ≤ 100) が与えられる。続くD 行に変化したピクセルの行と列の番号をそれぞれ表す ri とci (1 ≤ ri, ci ≤ N) が与えられる。diffi の中に、同じ位置は２回以上与えられない。

Output

上下対称かつ左右対称となっているコースターの枚数を１行に出力する。

Sample Input 1

7 8
00100000
00011000
10111101
01100110
01000110
10111101
00011000
00100100
2
5 3
1 6
1
6 8
3
6 8
3 3
3 6
2
6 3
6 6
0
2
3 8
6 8

Sample Output 1

3

入力例１のコースターの画像を以下に示す。この場合、２枚目、５枚目、６枚目のコースターが上下対称かつ左右対称となるため、3と報告する。

Sample Input 2

1 6
000000
000000
010010
010010
000000
000000

Sample Output 2

1

Sample Input 3

2 2
00
00
4
1 1
1 2
2 1
2 2

Sample Output 3

2
部活動調査

A 高校の生徒会長である明は、A 高校の生徒がどの部活動に所属しているかを調査することにした。A高校には 1 から N の番号が付けられた N 人の生徒と、1 から M の番号が付けられた M 種類の部活動がある。各部活動に人数制限はなく、0 人の部活動もありえる。ただし、A 高校の校則では生徒はひとつの部活動までしか所属できない。生徒は全員この校則を守っている。

明は生徒会員に調査を依頼し、各行が次のいずれかであるような K 行の記録を入手した。

生徒 a と生徒 b は同じ部活動に所属している。

生徒 c は部活動 x に所属している。

しかし、この記録には誰かが校則違反になってしまうような矛盾があるかもしれない。明は１行目から順に見ていき、矛盾があると判断できる最初の行を探すことにした。

K 行の記録が与えられたとき、矛盾があると判断できる最初の行の番号を求めるプログラムを作成せよ。

Input

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

N M K
record1
record2
:
recordK

１行目に生徒の人数 N (1 ≤ N ≤ 100000)、部活動の種類の数 M (1 ≤ M ≤ 100000)、記録の行数 K (1 ≤ K ≤ 200000) が与えられる。続く K 行に記録の各行 recordi が、以下のいずれかの形式で与えられる。

1 a b

または

2 c x

先頭の数字が「1」のとき、生徒 a (1 ≤ a ≤ N) と生徒 b (1 ≤ b ≤ N) が同じ部活動に所属していることを示す。ただし、a ≠ b である。

先頭の数字が「2」のとき、生徒 c (1 ≤ c ≤ N) が部活動 x (1 ≤ x ≤ M) に所属していることを示す。

Output

矛盾があると判断できる最初の行の番号を１行に出力する。見つからない場合は 0 を１行に出力する。

Sample Input 1

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

Sample Output 1

4

Sample Input 2

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

Sample Output 2

0

Sample Input 3

3 2 2
1 1 2
2 1 1

Sample Output 3

0
石版

古代国家イワシロの遺跡から無数の石版が発見された。研究者の調査によって、各石版には一つの単語が刻まれていることが分かった。しかし、長年の風化によって、以下の理由で解読が困難な石版もあるようだ。

石版に書かれている単語の一つの文字だけが 苔(こけ)で覆われている場合があり、その文字を把握することができない。

石版の左側が欠けており、そこに何か文字列が書かれていたかもしれない（石版の左側０文字以上を把握することができない）。

石版の右側が欠けており、そこに何か文字列が書かれていたかもしれない（石版の右側０文字以上を把握することができない）。

石版に苔が生えている場所は多くても一か所しかない。また、欠けた石版に苔が生えていることはあるが、石版の両側が同時に欠けていることはない。

研究者は、石版発見以前の調査でわかっている単語をまとめた辞書を持っている。しかし、風化の影響による苔と欠けがある石版から元の単語を推測したとき、辞書の中の単語に当てはまるものがいくつあるか、すぐには分からない。

石版の情報が与えられたとき、与えられた辞書の中に当てはまりそうな単語がいくつあるかを数えるプログラムを作成せよ。

Input

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

N M
word1
word2
:
wordN
slate1
slate2
:
slateM

１行目に辞書に載っている単語の数 N (1 ≤ N ≤ 50000)、石版の数 M (1 ≤ M ≤ 50000) が与えられる。続く N 行に単語 wordi が与えられる。単語は英小文字のみを含む長さが 1 以上 200 以下の文字列である。ただし、N 個の単語は全て異なる。続く M 行に、各石版の情報を表す文字列 slatei が与えられる。slatei は英小文字、「?」、「*」を含む長さが 1 以上 200 以下の文字列である。? は苔に覆われた文字を表す。? は一つの文字列に、多くとも一つしか現れない。文字列の先頭が * の場合、石版の左側が欠けていることを示す。文字列の末尾が * の場合、石版の右側が欠けていることを示す。* は、文字列の先頭か末尾以外には現れず、同時に両側に現れることはない。* が一つだけの文字列が与えられることはない。

入力で与えられる文字列の文字の総数は 3000000 を超えない。

Output

各石版について、単語の数を１行に出力する。

Sample Input 1

5 4
aloe
apple
apricot
cactus
cat
apple
ap*
*e
ca?*

Sample Output 1

1
2
2
2
ヒバラ海に沈む遺跡

アイヅ考古学会は、ヒバラ海に沈む古代国家イワシロの遺跡調査に乗り出した。遺跡はヒバラ海のどこか一か所に存在する。そこで、探査レーダを使い、海岸線からのレーダ探査で遺跡の位置のおおよその目星を付け、海岸線から最大何メートル離れた位置まで調査しなければならないかを見積もることにした。

上図のような直線で表された海岸線上に観測点を設置し、探査レーダを置く。探査レーダでは、観測点を中心とする、ある大きさの半円の範囲に遺跡があるということしかわからない。しかし、複数の観測データを組み合わせることで、より狭い範囲に絞り込むことができる。

観測点の位置と探査レーダが示す半径からなるいくつかの観測データが与えられたとき、海岸線から最大でどのくらいの距離まで調査する必要があるかを求めるプログラムを作成せよ。

Input

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

N
x1 r1
x2 r2
:
xN rN

１行目に探査レーダによって測定されたデータの数 N (1 ≤ N ≤ 100000) が与えられる。続く N 行に、観測データ i の海岸線上での位置をメートル単位で表す整数 xi (0 ≤ xi ≤ 1,000,000) と、その位置から半径何メートル以内に遺跡が存在するかを表す整数 ri (1 ≤ ri ≤ 1,000,000) が与えられる。観測点が同じ観測データが２つ以上与えられることもある。

与えられた観測データが複数の場合、それらすべての半円に含まれる点が必ず存在すると考えてよい。

Output

海岸線から最大で何メートルまで調査する必要があるかを実数で出力する。ただし、誤差がプラスマイナス 0.001 メートルを超えてはならない。この条件を満たせば小数点以下は何桁表示してもよい。

Sample Input 1

2
0 2
1 2

Sample Output 1

1.936

Sample Input 2

3
0 3
1 2
2 1

Sample Output 2

1.0

Sample Input 3

2
0 1
3 2

Sample Output 3

0.0
滑降競技

あなたは磐梯山で開催されるスキー競技に参加します。この競技では、ゲレンデを各選手が２回滑降し、その合計時間の短さを競います。ゲレンデにはいくつもの旗が立っていて、それらの間には選手が通るラインが設定されています。選手はスタート地点からゴール地点まで、ラインをたどりながら滑降します。ラインは以下のように設定されています。

ゴール地点以外の旗からは一本以上のラインが延びている。

ある旗とある旗を直接結ぶラインは多くても一つしかない。

ラインは決まった方向にしか滑降できない。

どの旗にも必ずスタートからたどり着くことができ、どの旗からもゴールにたどり着ける。

どのようにラインをたどっていっても、同じ旗に戻ることはない。

選手は現在いる旗から延びているラインを選んで次に行く旗を決めることができます。ラインの選び方は自由なので、選手は滑降ごとに異なるラインを通ってゴールに向かうことができます。

競技前夜、スポーツドクターのソルト君が、あなたが滑るときのゲレンデの状態を予想してくれました。それによると、１回目の滑降で通ったラインは通過の影響で雪質が変わってしまうため、２回目の滑降で同じラインを通ると、かかる時間が変わることがあるそうです。ソルト君は、それぞれのラインを１回目に通るときの時間と、２回目に通るときの時間を教えてくれました。あなたはこの情報をたよりに、２回の滑降の合計時間を最短にする滑り方を朝までに見つけなければなりません。

ゲレンデの状態が与えられたとき、２回の滑降の合計時間でもっとも短い値を計算するプログラムを作成せよ。

Input

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

N P
s1 e1 t1,1 t1,2
s2 e2 t2,1 t2,2
:
sP eP tP,1 tP,2

１行目に、旗の数 N (2 ≤ N ≤ 1000) と２つの旗を結ぶラインの数 P (1 ≤ P ≤ 2000) が与えられる。旗には 1 から N までの番号が振られていて、スタート地点の旗の番号が1、ゴール地点の旗の番号が N である。続く P 行に、２つの旗を結ぶラインの情報が与えられる。各行には、ラインの始点である旗の番号 si (1 ≤ si < N)、終点である旗の番号 ei (1 < ei ≤ N)、１回目に通るときの所要時間 ti,1 (1 ≤ ti,1 ≤ 100000)、同じラインを２回目に通ったときの所要時間(1 ≤ ti,2 ≤ 100000) が与えられる。

Output

２回の滑降の合計時間でもっとも短い値を１行に出力する。

Sample Input 1

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

Sample Output 1

3

Sample Input 2

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

Sample Output 2

2

Sample Input 3

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

Sample Output 3

13
直方体

アイヅ放送協会の教育番組(ＡＨＫ教育)では、子供向けの工作番組「あそんでつくろ」という番組を放送しています。今日は画用紙で箱を作る回ですが、用意した長方形の画用紙で直方体ができるかを確かめたいと思います。ただし、画用紙は切ったり折ったりしてはいけません。

６つの長方形が与えられるので、それらを使って直方体が作れるかどうか判定するプログラムを作成せよ。

Input

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

h1 w1
h2 w2
h3 w3
h4 w4
h5 w5
h6 w6

入力は６行からなり、それぞれの行に各長方形の縦の長さを表す整数 hi (1 ≤ hi ≤ 1000) と横の長さを表す整数 wi (1 ≤ wi ≤ 1000) が与えられる。

Output

直方体を作成できる場合には「yes」を、作成できない場合には「no」を出力する。ただし、立方体は直方体の一種なので、立方体の場合でも「yes」と出力する。

Sample Input 1

2 2
2 3
2 3
2 3
2 2
3 2

Sample Output 1

yes

Sample Input 2

2 2
2 3
2 3
2 3
2 2
2 2

Sample Output 2

no
関連商品

インターネット通販サイトでは、ユーザが現在見ている商品と同じページに、過去に他のユーザによって、現在見ている商品と一緒に買われた別の商品をいくつか表示してくれます。関連性の高いと思われる商品を提示することで、売り上げを伸ばすことができると考えられているからです。

似たようなことは、一緒に買われることが多い商品を近くに配置する、という工夫として、近所のスーパーマーケットでも目にすることができます（例えば、パンとジャムのような）。あなたの仕事は、商品配置の工夫を助けるプログラムを書くことです。今回は、ある基準となる回数を設定し、一緒に買われた回数が基準回数以上である、２つの商品の組み合わせを求めたいと思います。

一緒に買われた商品の情報と基準回数が与えられたとき、基準回数以上一緒に買われた商品２つの組み合わせを出力するプログラムを作成せよ。

Input

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

N F
info1
info2
:
infoN

１行目に、一緒に買われた商品の情報の数 N (1 ≤ N ≤ 100) と、基準回数 F (1 ≤ F ≤ 100) が与えられる。続く N行に、一緒に買われた商品の情報が与えられる。一緒に買われた商品の情報 infoi は、以下の形式で与えられる。

M item1 item2 ... itemM

M (1 ≤ M ≤ 10) は、この情報がいくつの商品を含むかを表す。itemj は、この買い物で買われた商品の名前であり、英小文字だけから成る長さ 1 以上 30 以下の文字列である。infoi の中に同じ商品が与えられることはない。

Output

１行目に基準回数以上一緒に買われた商品２つの組み合わせの数を出力し、２行目以降に組み合わせをすべて出力する。ただし、組み合わせが一つもない場合は２行目以降には何も出力しない。

出力の順番は、組み合わせ内の商品名どうしを、辞書式順序（英和辞書で単語が並んでいる順番）で並べたあと、組み合わせどうしについては以下のようにする。

一つ目の商品名どうしを比較して、辞書式順序で早いほうが先。

同じ場合は、二つ目の商品名どうしを比較して、辞書式順序で早いほうが先。

商品名はスペース一つで区切り、商品の組み合わせは改行一つで区切る。

Sample Input 1

5 2
3 bread milk banana
2 milk cornflakes
3 potato bread milk
4 cornflakes bread milk butter
2 potato bread

Sample Output 1

3
bread milk
bread potato
cornflakes milk

Sample Input 2

5 5
3 bread milk banana
2 milk cornflakes
3 potato bread milk
4 cornflakes bread milk butter
2 potato bread

Sample Output 2

0
虫食い算

足し算は筆算で簡単に計算できますが、もし、いくつかの数字が欠けていたら、欠けている数字を埋めるのは簡単でしょうか？ 例えば、以下のような筆算において、１から９の数字が一度しか現れないという条件があるとき、ＣとＥのマスに入る数字はいくつになるでしょう？ この場合、Ｃに入るのは８，Ｅに入るのは５が正解となります。このように、数字がいくつか欠けている演算を虫食い算と呼びます。

１から９の数字が一度しか現れないという条件はそのままで、以下のようにもっとたくさんの数字が欠けていたら、正解となる数字の埋め方は一通りしかないのでしょうか？ 実は、必ず一通りに決まるとは限りません。

上の図のような形をした虫食い算の、ＡからＩの各マスの情報が与えられたとき、正しい埋め方が何通りあるかを出力するプログラムを作成せよ。

Input

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

A B C D E F G H I

１行に、虫食い算の Ａ から Ｉ のマスに入っている数字の情報が与えられる。ただし、与えられた値が -1 のときは、そのマスの数字が欠けていることを表す。-1 以外の値は、1 から 9 の整数のいずれかで、それらの間に重複はない。

Output

正しい埋め方が何通りあるかを１行に出力する。

Sample Input 1

7 6 -1 1 -1 9 2 3 4

Sample Output 1

1

Sample Input 2

7 6 5 1 8 9 2 3 4

Sample Output 2

0

Sample Input 3

-1 -1 -1 -1 -1 -1 8 4 6

Sample Output 3

12

Sample Input 4

-1 -1 -1 -1 -1 -1 -1 -1 -1

Sample Output 4

168
貴金属リサイクル

会津特産の貴金属であるアイヅニウムをリサイクルするＰＣＫ社は、全国各地にネットワークを持ち、たくさんの回収車でアイヅニウムを集めてきます。この会社は、処理の効率化のために、塊の重さと個数の単位を規格で定めています。

塊の重さには「ボッコ」という単位を使います。x ボッコのアイヅニウムの重さは 2xグラムです。宝石で例えると、「カラット」のようなものです。また、塊の個数には「マルグ」という単位を使います。y マルグは 2y 個です。１箱に入っている品物の個数である「ダース」のようなものです。ただし、x と y は ０ 以上の整数でなければいけません。

回収車 i は、 ai ボッコの重さのアイヅニウムを bi マルグずつ集めます。こうして集まったアイヅニウムを、炉の中に入れて溶かし、いくつかのアイヅニウムの塊を再生しますが、なるべくアイヅニウムの塊の数が少なくなるようにします。このとき、集めてきたアイヅニウムの重さの合計と、再生してできるアイヅニウムの重さの合計は変わりません。

回収車が集めたアイヅニウムの塊のボッコ単位の重さとマルグ単位の個数が与えられたとき、再生後のアイヅニウムの塊の数が最小になるような結果を求めるプログラムを作成せよ。

Input

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

N
a1 b1
a2 b2
:
aN bN

１行目に、回収車の数 N (1 ≤ N ≤ 100000) が与えられる。続く N 行に、回収車 i が回収したアイヅニウムの塊の、「ボッコ」単位の重さを表す整数 ai (0 ≤ ai ≤ 100000) と「マルグ」単位の個数を表す整数 bi (0 ≤ bi ≤ 100000) が与えられる。

Output

再生した後に得られるアイヅニウムの塊の数が最小になるような、ボッコ単位の重さとマルグ単位の個数を、重さの小さい順に出力する。

Sample Input 1

3
2 1
1 3
2 2

Sample Output 1

3 0
5 0

Sample Input 2

1
100000 2

Sample Output 2

100002 0
完全平等二国間貿易

サイバースペースにあるアイヅ国はワカマツ国と情報貿易を行っています。２つの国はお互いに有用なデータを交換することで経済発展を遂げています。博愛と平等、そして何よりも会津地方の古い言葉である、「ならぬことはならぬものです」を国是とする両国は、定期的に貿易状況の調査を行っています。

調査では、バイト単位でアイヅ国から見たデータ流入量から流出量を引いた値を、１ナノ秒ごとに求めた表が与えられます。その表から、値の総和が０になる最長の区間を見つけます。この区間が長いほど、平等性が保たれていると判断します。

貿易状況が記録された表が与えられたとき、値の総和が０になる最長の区間の長さを求めるプログラムを作成せよ。

Input

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

N
d1
d2
:
dN

１行目に、表に書かれた値の数 N (1 ≤ N ≤ 200000) が与えられる。続く N 行に、表の i 行目に書かれた値を示す整数 di (-109 ≤ di ≤ 109) が与えられる。

Output

表から得られる、総和が０になる最長の区間の長さを１行に出力する。そのような区間が存在しない場合、「0」を１行に出力する。

Sample Input 1

5
18
102
-155
53
32

Sample Output 1

3

入力例１では、２行目から４行目までの値の総和が０になるので、最長の区間の長さが3になる。

Sample Input 2

4
1
1
-1
-1

Sample Output 2

4

入力例２では、２行目から３行目の総和が０になるが、１行目から４行目までの値の総和も０になるので、最長の区間の長さが4になる。
プログラム停止判定

皆さんは、苦労して作ったプログラムを実行してみたら、無限ループになってしまった経験はありませんか？ プログラムの実行が停止するかどうかを、実行しなくても事前に判定できると便利ですよね。

残念ながら、皆さんがふだん使っているプログラミング言語では、あらゆるプログラムに対してそのような判定をすることは不可能です。しかし、それよりもはるかに計算能力の低いプログラミング言語なら、その言語で書いたプログラムが停止するかどうかを判定するプログラムを書ける場合があります。

TinyPowerというプログラミング言語を考えます。この言語のプログラムは行の並びです。プログラムの各行には、先頭に行番号を書き、その後ろに文を一つ書きます。この言語で書ける文の種類は以下の通りです。

文の種類
動作

ADD var1 var2 var3
変数 var2 の値と var3 の値を加算した結果を変数 var1に代入する

ADD var1 var2 con
変数 var2 の値と定数 con を加算した結果を変数 var1 に代入する

SUB var1 var2 var3
変数 var2 の値から var3 の値を減算した結果を変数 var1 に代入する

SUB var1 var2 con
変数 var2 の値から定数 con を減算した結果を変数 var1 に代入する

SET var1 var2
変数 var2の値を変数 var1 に代入する

SET var1 con
定数 con を変数 var1 に代入する

IF var1 dest
変数 var1 の値が０でないときだけ、行番号 dest にジャンプする

HALT
プログラムを停止させる

行番号は正の整数で、プログラム中に同じ行番号が２つ以上現れることはありません。変数は英小文字一文字で表し、定数と変数の値は整数です。変数の宣言は不要で、変数の初期値は０です。

プログラムの実行は先頭の文から始まり、並んでいる順に文が実行されます。ただし、上の表に書かれたように、IF文の変数の値が０でないときは、変数の後ろに書かれた行番号で指定される行にジャンプし、その行に書かれた文から実行を続けます。プログラムは以下のときに停止します。

HALT文を実行したとき。

負の整数または１６以上の整数を変数に代入しようとしたとき（変数の値は更新されない）。

プログラムに現れない行番号にジャンプしようとしたとき。

プログラムの最後の文を実行した後、そこからどの行にもジャンプしないとき。

TinyPowerのプログラムが与えられたとき、それが停まるかどうかを判定するプログラムを作成せよ。

Input

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

N
stmt1
stmt2
:
stmtN

１行目にプログラムの行数 N (1 ≤ N ≤ 50) が与えられる。続く N 行に、TinyPowerプログラムの文 stmti が与えられる。stmti は、以下のいずれかの形式で与えられる。

line ADD var1 var2 var3

または

line ADD var1 var2 con

または

line SUB var1 var2 var3

または

line SUB var1 var2 con

または

line SET var1 var2

または

line SET var1 con

または

line IF var1 dest

または

line HALT

line, dest (1 ≤ line, dest ≤ 1000) は行番号、varj (英小文字１文字)は変数、con (0 ≤ con ≤ 15) は定数を表す。stmti 中の区切りは空白１文字とする。なお、プログラム中に変数は必ず１つ以上現れ、異なる変数名は５つまでしか現れないものとする。

Output

プログラムが停止するときは、プログラムに現れる変数の結果を、変数名の辞書順に改行区切りで出力し、停止しないときは「inf」を出力する。変数の結果は、変数名と変数の値を「=」で区切って出力する。

Sample Input 1

6
10 SET c 1
20 SET i 5
100 ADD s s i
110 SUB i i c
120 IF i 100
200 HALT

Sample Output 1

c=1
i=0
s=15

入力例１は、１から５までの整数の和を計算し、その結果を変数sに格納したあと、HALT文の実行で停止する。

Sample Input 2

3
10 SET c 1
120 IF c 10
20 HALT

Sample Output 2

inf

入力例２は、行番号10でcに1を代入し、次の行番号120のIF文で行番号10に戻ることを繰り返すので、停止しない。

Sample Input 3

3
111 SET c 1
12 SUB c c 2
777 SET a 4

Sample Output 3

a=0
c=1

入力例３は、行番号111でcに1を代入し、次の行番号12でcに-1を代入しようとするので、停止する。このときcの値は-1に更新されない。行番号777は実行されないので、aの値は初期値0のままである。
スケジューラ

あなたはユニークなオペレーティングシステム「ウンズグネ１５」の開発に取り組んでおり、性能を決定付けるスケジューラの設計に頭を悩ませている。スケジューラとは、実行すべき処理をタスクという単位で表現し、それらをどの順序で実行するかを決定するプログラムである。スケジューラはタスクに１から N の番号をつけて管理する。全てのタスクは K 個の属性 f1, f2,..., fK を持ち、各属性にはそれぞれ固有の値が設定されている。ただし、ある２つのタスクについて、対応する属性の値すべてが同じになることはない。

あるタスクには、そのタスクの実行を始める前までに実行を完了していなければならないタスクが与えられることがある。タスクＡがタスクＢの前に完了していなければならないことを「タスクＡ → タスクＢ」と表す。例えば、タスク１ → タスク２、タスク３ → タスク２という関係があれば、タスク２を処理する前にタスク１とタスク３の両方の処理が終わっていなければならない。このような関係をタスク間の依存関係という。ただし、あるタスクから依存関係をたどっていって、そのタスクにたどり着くことはない。

スケジューラは依存関係に従って、実行順序を決定する。しかし、依存関係だけでは順序が一通りに定まらない場合がある。そのような場合は、各タスクが持つ属性の値によって、次に処理するタスクを選択する。

ウンズグネ１５のタスクは属性を複数もつため、すべての属性の値を考慮して実行順序を決定する必要がある。そのために、属性を比較する順番を定める評価順序を用いる。評価順序が最も先の属性を比較し、その属性の値が最も大きいタスクを選択する。そのようなタスクが複数ある場合は、評価順序がその次の属性で比較し、以下同様な手順を繰り返す。例えば、以下の3 つの属性を持つ3 つのタスクについて考える。

タスク＼属性
f1
f2
f3

X	3	3	2

Y	3	2	2

Z	3	1	3

評価順序がf1 f2 f3、f2 f1 f3、または f2 f3 f1 に設定されている場合は、タスクX が選ばれる。また、評価順序が f1 f3 f2、f3 f1 f2、または f3 f2 f1 に設定されている場合はタスクZ が選ばれる。

ウンズグネ１５のスケジューラの特徴は、属性の評価順序が途中で何度でも変更できることである。評価順序は、ある個数のタスクの実行が完了した時点で変更できる。ただし、スケジューラが最初に使う評価順序はあらかじめ決まっている。

各タスクの属性の値、タスクの依存関係、評価順序の変更情報が与えられたとき、タスクを実行する順序を報告するプログラムを作成せよ。

Input

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

N K
f1,1 f1,2 ... f1,K
f2,1 f2,2 ... f2,K
:
fN,1 fN,2 ... fN,K
D
a1 b1
a2 b2
:
aD bD
e0,1 e0,2 ... e0,K
R
m1 e1,1 e1,2 ...… e1,K
m2 e2,1 e2,2 ...… e2,K
:
mR eR,1 eR,2 ...… eR,K

１行目に、タスクの数 N (2 ≤ N ≤ 50000) と、各タスクが持つ属性の数 K (1 ≤ K ≤ 4) が与えられる。続く N 行に、タスク i が持つ属性の値 fi,j (1 ≤ fi,j ≤ 100000) が与えられる。続く１行に、依存関係の個数 D (0 ≤ D ≤ 200000) が与えられる。続く D 行に依存関係 ai → bi (1 ≤ ai, bi ≤ N) が与えられる。

続く１行に、最初の評価順序 e0,j (1 ≤ e0,j ≤ K) が与えられる。続く１行に、評価順序の変更回数 R (0 ≤ R < N) が与えられる。続く R 行に、評価順序の変更情報が与えられる。i 回目の変更情報は、実行が完了したタスクの個数 mi (1 ≤ mi < N) と評価順序 ei,j (1 ≤ ei,j ≤ K) からなり、全部で mi 個のタスクの実行が完了した時点で、評価順序を ei,1, ei,2,... , ei,K に変更することを示す。

評価順序の変更情報は以下の条件を満たす。

ei,1, ei,2,..., ei,K 中に同じ値は２つ以上現れない。

i < j のとき、 mi < mj である。

Output

スケジューラが処理する順番に、タスクの番号を出力する。

Sample Input 1

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

Sample Output 1

4
5
2
1
3

Sample Input 2

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

Sample Output 2

3
2
5
1
4
消える数列、消えない数列

ただお君は頭の体操をするために、数列を使ったゲームをしています。このゲームでは、はじめに、１から９までの数字がランダムに並んだ列が与えられます。ただお君は、数列からその一部分を消していきます。ルールは、以下の通りです。

数列から、同じ数字が２つ以上並んでいる部分を適当に選ぶ。その部分を含み、連続して現れている同じ数字をすべて消す。

消した部分の右側に数列が残っていた場合は、それを左に詰めて、数列を１つにまとめる。

上の２つの操作を繰り返した結果、すべての数字が消えればゲームクリアとなる。

例えば、上の図のような 1,2,3,3,2,2,1,2,2 という数列の場合、

左から数えて、３番目、４番目の３を消すと 1,2,2,2,1,2,2

左から数えて、２番目から４番目の２を消すと 1,1,2,2

左から数えて、１番目と２番目の１を消すと 2,2

左から数えて、１番目と２番目の２を消すと、ゲームクリアとなります。

ただし、どのように数字を消してもクリアできない数列があります。たとえば、1,2,3,3,1,2 や 1,2,3,1,2,3 などの数列です。短い数列であれば、ただお君でもクリアできるかどうかがすぐに分かり、クリアできないと分かれば違う数列にチャレンジできますが、長い数列になるとそう簡単にはいきません。

与えられた数列が上のゲームをクリアできるかどうか判定するプログラムを作成せよ。

Input

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

N
c1 c2 ... cN

１行目の N (1 ≤ N ≤ 100) は、数列の長さを表す整数である。２行目には１つの空白で区切られた N 個の整数 ci (1 ≤ ci ≤ 9) が与えられる。ci は数列の i 番目の数字を示す。

Output

上に示されたルールで数列を消すことができる場合は「yes」、できない場合は「no」を出力する。

Sample Input 1

8
1 2 3 3 2 1 2 2

Sample Output 1

yes

Sample Input 2

7
1 2 2 1 1 3 3

Sample Output 2

yes

Sample Input 3

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

Sample Output 3

no

Sample Input 4

5
1 1 2 2 1

Sample Output 4

yes
線分配置

Ａ大学は今年もプログラミングコンテストを開催する。作題チームの一員であるあなたは、計算幾何学の問題の入力データの作成を担当することになった。あなたが作りたい入力データは、x 軸または y 軸に平行で、互いに触れ合うことのない線分の集合である。あなたは、次のアルゴリズムに基づいたデータ生成プログラムを開発して、入力データを生成する。

xy 平面上の線分の集合 T を空にする。

次の処理を N 回繰り返す。

x 軸または y 軸に平行な適当な線分 s を作る。

s が T 内のどの線分にも触れない場合は s を T に追加し、触れる場合は s を追加しない。

x 軸または y 軸に平行な N 本の線分を順番に入力し、各線分が平面上に追加されるかどうかを判定するプログラムを作成せよ。

Input

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

N
px1 py1 qx1 qy1
px2 py2 qx2 qy2
:
pxN pyN qxN qyN

１行目に線分の数 N (1 ≤ N ≤ 100000) が与えられる。続く N 行に、i 番目に追加したい線分の情報が与えられる。各行に与えられる４つの整数 pxi, pyi, qxi, qyi (0 ≤ pxi, pyi, qxi, qyi ≤ 109) は、それぞれ i 番目の線分の端点の x 座標、y 座標、もう一つの端点の x 座標、y 座標を表す。ただし、線分の長さは１以上である。

Output

各線分について、追加される場合「1」を、追加されない場合「0」を１行に出力する。

Sample Input 1

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

Sample Output 1

1
1
0
1
0
1
1
0
1
あみだくじ

PCK 君はみんなでゲーム大会をしています。このゲーム大会では、大会の最後にあみだくじで順位を入れ替えます。大会には N 人のプレイヤーが参加しており、あみだくじには N 本の縦棒があります。

あみだくじは、図のように N - 1 段の部品からできており、それぞれ 1 から N-1 の番号が割り当てられています。各部品は、あみだくじの一部を横方向に切り取った部分です。各部品にはいくつかの横棒が引かれていますが、部品の中の横棒はすべて同じ高さにあります。横棒同士がつながることはありません。

大会の最後に、順位の高い人から右から左の順に縦棒が割り当てられます。PCK 君は現時点で最下位なので、左端からスタートです。例えば、上図の組み立て方では、６位だったPCK 君は、このあみだくじによって４位（右から４番目の棒）に浮上することができます。

このゲームでは、最下位の人にあみだくじを組み立てる権利が与えられます。PCK 君はうまくあみだくじの部品の順番を決めて、逆転優勝を狙っています。ただし、部品を回転することはできません。

（※補足：あみだくじのたどり方について）

あみだくじのある縦棒の上端から出発して上から下へ進む。ただし、横棒がある地点ではその横棒でつながった別の縦棒に移動する。これを、縦棒の下端にたどり着くまで繰り返す。

ゲームの参加人数とあみだくじの部品の情報を入力し、PCK 君が優勝できるかどうか判定するプログラムを作成せよ。優勝できる場合、そのあみだくじの部品の並びを１つ出力せよ。ただし、そのような並べ方が複数ある場合は、与えられた部品の番号で辞書順最小のものを出力せよ。

Input

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

N
b1,1 b1,2 ... b1,N−1
b2,1 b2,2 ... b2,N−1
:
bN−1,1 bN−1,2 ... bN−1,N−1

１行目に大会の参加者数 N (2 ≤ N ≤ 500) が与えられる。続く N-1 行に i 番目の部品の横棒の情報が与えられる。bi,j が 1 であるとき、i 番目の部品の、左から j 本目の縦棒から j+1 番目の縦棒へ横棒が引かれていることを表す。bi,j が 0 であるとき、i 番目の部品の、左から j 本目の縦棒から j+1 番目の縦棒へ横棒は引かれていないことを表す。bi,j が 1 であるとき、bi,j+1 が 1 となるような部品は与えられない。また、横棒の総数は 10000 を越えない。

Output

PCK 君が優勝できる場合，１行目に「yes」と出力する。続く N-1 行に、あみだくじの上から順に、部品の番号の並びを出力する。そのような並びが複数ある場合、辞書順最小である並びを出力する。PCK 君が優勝できない場合、１行に「no」と出力する。

Sample Input 1

6
1 0 0 0 1
1 0 1 0 1
0 1 0 1 0
0 0 0 1 0
0 1 0 0 1

Sample Output 1

yes
1
3
2
4
5

Sample Input 2

5
0 1 0 1
0 1 0 1
1 0 1 0
1 0 0 1

Sample Output 2

yes
4
1
3
2

4 1 3 2 と 4 2 3 1 の２通りの組み立て方が可能だが、辞書順で小さい方の 4 1 3 2 を出力する。

Sample Input 3

5
1 0 0 1
0 1 0 1
1 0 0 0
0 1 0 1

Sample Output 3

no
ワード

コンピュータで扱われるデータの最小単位をビット(bit)と呼び、複数のビットをまとめて表した情報量をワード(word)と呼びます。現在、多くのコンピュータでは１ワードを３２ビットとして処理しています。

１ワードを３２ビットで表すコンピュータについて、ワード単位で与えられたデータ量 W をビット単位で出力するプログラムを作成せよ。

Input

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

W

入力は１行からなり、データ量 W (0 ≤ W ≤ 100) が与えられる。

Output

ビット単位の値を１行に出力する。

Sample Input 1

4

Sample Output 1

128

Sample Input 2

3

Sample Output 2

96
日の出と日の入り

太陽が現れることを「日の出」、隠れることを「日の入り」と呼びますが、その厳密な時刻は太陽が地平線に対してどのような位置にある時でしょうか。

下の図のように、太陽を円、地平線を直線で表すことにします。このとき、太陽の「日の出」「日の入り」の時刻は、太陽を表す円の上端が地平線を表す直線と一致する瞬間とされています。日の出の時刻を過ぎ、円の上端が直線より上にある時間帯が昼間、円が直線の下へ完全に隠れている時間帯が夜間となります。

ある時刻の地平線から太陽の中心までの高さと、太陽の半径を入力とし、その時刻が「昼間」か、「日の出または日の入り」か、「夜間」かを出力するプログラムを作成せよ。

Input

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

H R

入力は１行からなり、ある時刻の地平線から太陽の中心までの高さを表す整数 H (-1000 ≤ H ≤ 1000) と半径を表す整数 R (1 ≤ R ≤ 1000) が与えられる。ただし、H は太陽の中心が地平線上にあるときを 0 として、それより上にあるときは正、下にあるときは負とする。

Output

昼間のとき「1」、日の出または日の入りのとき「0」、夜間のとき「-1」を１行に出力する。

Sample Input 1

-3 3

Sample Output 1

0

Sample Input 2

3 3

Sample Output 2

1

Sample Input 3

-4 3

Sample Output 3

-1
日本の暦

「西暦」は西洋から輸入された概念ですが、日本には暦上の年を表す方法として「元号」に年を付けて識別する和暦という概念があります。例えば今年は西暦なら２０１６年ですが、和暦なら平成２８年です。どちらもよく使われる年の表現方法ですが、ある年の西暦がわかっていても和暦で何年かわからない、またはその逆の状況を経験したことはありませんか？

西暦で年が与えられたとき和暦の年を、和暦で年が与えられたとき西暦の年を出力するプログラムを作成せよ。ただし、西暦と和暦の対応は、簡単のため以下のようにする。

西暦
和暦

１８６８年から１９１１年
明治元年から明治４４年

１９１２年から１９２５年
大正元年から大正１４年

１９２６年から１９８８年
昭和元年から昭和６３年

１９８９年から２０１６年
平成元年から平成２８年

Input

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

E Y

入力は１行からなり、E (0 ≤ E ≤ 4) は与えられる暦の種類、Y はその暦での年であり、E が 0 のときは西暦 Y (1868 ≤ Y ≤ 2016)年、1 のときは和暦の明治 Y (1 ≤ Y ≤ 44)年、2 のときは和暦の大正 Y (1 ≤ Y ≤ 14)年、3 のときは和暦の昭和 Y (1 ≤ Y ≤ 63)年、4 のときは和暦の平成 Y (1 ≤ Y ≤ 28)年を表す。

Output

西暦ならば和暦に、和暦ならば西暦に変換した結果を、１行に出力する。ただし、西暦を和暦に変換した結果は、明治なら文字「M」、大正なら文字「T」、昭和なら文字「S」、平成なら文字「H」を先頭に付けて出力する。

Sample Input 1

0 2015

Sample Output 1

H27

Sample Input 2

0 1912

Sample Output 2

T1

Sample Input 3

2 1

Sample Output 3

1912

Sample Input 4

4 28

Sample Output 4

2016
ニュータウン

会津県では人口増加のためにニュータウンを作ることにしました。そのために、新たに長方形の土地を開拓し、この土地を余すところなく、すべて同じ大きさの正方形からなる区画に区切ることを決めました。この土地の整備には、区画数に比例した費用がかかりますが、県としてはこの費用を最小にしたいと考えています。

新たに開拓した土地の東西方向と南北方向の長さと、１区画当たりの整備費用が与えられたとき、すべての区画を整備したときにかかる、最小の整備費用を求めるプログラムを作成せよ。

Input

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

W H C

入力は１行であり、新たに開拓した土地の東西方向の長さ W (1 ≤ W ≤ 1000)と南北方向の長さ H (1 ≤ H ≤ 1000)、区画当たりの整備費用 C (1 ≤ C ≤ 1000)が整数で与えられる。

Output

土地を整備するために必要な最小の費用を１行に出力する。

Sample Input 1

10 20 5

Sample Output 1

10

２個の正方形で土地を余すところなく区切ることができ、１区画当たりの整備費用が５なので、１０と
出力する。

Sample Input 2

27 6 1

Sample Output 2

18

１８個の正方形で土地を余すところなく区切ることができ、１区画当たりの整備費用が１なので、１８と出力する。
形状データ処理

コンピュータグラフィクスでは、三次元の形状を表現する方法として、ポリゴンモデルが使われます。ポリゴンモデルとは、頂点座標と、それらの頂点のつなぎ方を与えて面を作るモデルです。

一般のポリゴンモデルでは、任意の多角形を扱えますが、今回は三角形からなるポリゴンモデルを考えることにします。任意のポリゴンモデルは三角形を表す面情報の集まりとして表すことができます。

一つの面情報は、３つの頂点を並べて表します。ただし、並び方が異なるだけで同じ３点からなる場合は、同じ面情報を表すことにします。例えば、下図の四面体で、頂点１,２,３を繋いでできる面は、頂点２,３,１や、頂点３,２,１などのように表すこともできます。このように、同じ面情報が複数あると無駄になるので、１つにまとめてしまった方が良いでしょう。

面情報が与えられたとき、重複した面を無くすために消さなければならない面情報の個数を求めるプログラムを作成せよ。

Input

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

N
p11 p12 p13
p21 p22 p23
:
pN1 pN2 pN3

１行目に、ポリゴンモデルの面情報の数 N (1 ≤ N ≤ 1000) が与えられる。続く N 行に、i 番目の面を作るために使う頂点の番号 pij (1 ≤ pij ≤ 1000) が与えられる。ただし、一つの面について、同じ頂点を２度以上使うことはない（pi1 ≠ pi2 かつ pi2 ≠ pi3 かつ pi1 ≠ pi3 である）。

Output

重複した面を無くすために消さなければならない面情報の個数を１行に出力する。

Sample Input 1

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

Sample Output 1

0

Sample Input 2

6
1 3 2
1 2 4
1 4 3
2 3 4
3 2 1
2 3 1

Sample Output 2

2

入出力例２では、１つ目と５つ目と６つ目の面は頂点1, 3, 2を使って三角形を作っていて、点の順番が異なるだけなので重複している。つまり、重複した面のうち２つの面を消せば重複した面は無くなる。
パンケーキ

あなたが勤めているパンケーキ屋では、細長い鉄板にパンケーキの生地を横１列に並べて焼きます。パンケーキはへらで何回か裏返せば完成します。何回以上裏返せば完成するかはパンケーキごとに異なります。

へらは大きいので、隣り合ったパンケーキは２枚同時に裏返されてしまいます。このとき、これら２枚の位置は入れ替わりません。ただし、両端だけは、隣のパンケーキといっしょに裏返すだけでなく、１枚だけ裏返すこともできます。すべてのパンケーキを必要な回数以上裏返したら、全部いっぺんに鉄板からおろして完成です。

パンケーキを必要な回数より多く裏返すと固くなってしまうので、あまり多く裏返したくありません。そこであなたは、すべて完成するまでに、各パンケーキが裏返る回数の総和が最小になるような方法を見つけようと考えました。

鉄板の上のパンケーキの枚数と、完成するまでに何回以上裏返さなければならないかがパンケーキごとに与えられているとき、すべて完成するまでに各パンケーキが裏返る回数（へらを操作する回数ではない）の総和の最小値を計算するプログラムを作成せよ。

Input

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

N
p1 p2 ... pN

１行目にパンケーキの枚数 N (3 ≤ N ≤ 5000)が与えられる。２行目に各パンケーキが完成するまでに必要な裏返す回数 pi (0 ≤ pi ≤ 3)が与えられる。

Output

すべて完成するまでに各パンケーキが裏返る回数の総和の最小値を１行に出力する。

Sample Input 1

3
1 2 1

Sample Output 1

4

へらを１回操作して左端と真ん中のパンケーキを裏返すと、２個のパンケーキが１回ずつ裏返るので、この操作で裏返る回数は２回。さらに、へらを１回操作して真ん中と右端のパンケーキを裏返すと、２個のパンケーキが１回ずつ裏返るので、この操作で裏返る回数は２回。以上の総和４回が答えになる。

Sample Input 2

3
0 3 0

Sample Output 2

6

へらを１回操作して左端と真ん中のパンケーキを裏返すと、この操作で裏返る回数は２回。これを３回繰り返したときの、総和の６回が答えになる（真ん中のパンケーキは、両隣のどちらかのパンケーキと一緒に裏返すことしかできないことに注意）。
繰り返す呪文

古代国家イワシロを発見し調査を進めた我々研究者は、ついにイワシロの中心部にある神殿を発見した。神殿にはイワシロの神にささげた石版が保管されていた。石版には、文章と呪文が一つずつ、２つの文字列が書かれていた。

イワシロでは呪文が文章の中に、何回現れるかが重要な意味を持つ。ただし、呪文に含まれるすべての文字が順番に、文章の中にとびとびで現れるものも１回現れていると考える。例えば、文章が"abab" で、呪文が "ab" であれば、連続でないものも含めて "ab" は "abab" の中に３回現われている（

ab

ab, ab

ab

,

a

ba

b

の３通り）。

文章と呪文が与えられたとき、呪文が文章の中に何回現れるかを出力するプログラムを作成せよ。

Input

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

t
b

１行目に、石版に書かれた文章を表す文字列tが与えられる。２行目に、石版に書かれた呪文を表す文字列bが与えられる。どちらの文字列も英小文字だけから成る、長さが1以上1000以下の文字列である。

Output

呪文が文章の中に何回現れるかを１行に出力する。ただし、出力すべき値は非常に大きくなりうるので、代わりに 1,000,000,007 で割った余りを出力する。

Sample Input 1

abab
ab

Sample Output 1

3

Sample Input 2

aaaabaaaabaaaabaaaab
aaaaa

Sample Output 2

4368

Sample Input 3

data
structure

Sample Output 3

0
村の道路計画

会津国の若松平野に、集落が点在していました。いくつかの集落の間はまっすぐで互いに行き来できる道で繋がっていて、平野にあるどの集落の間も道を辿って行き来ができます。それぞれの道には長さに応じた維持費がかかりますが、すべての集落が資金を出し合って道を維持していました。

あるとき、すべての集落が一つの村にまとまることが決まり、村を囲む境界線を引くことになりました。国の決まりでは、村を構成するどの２つの集落を結んだまっすぐな線も、村の外を通ってはいけません（境界線上を通ることは許されます）。さらに、会津国では村を囲む境界線上に道がなければなりません。境界線上に道がない場所には、国が新たに道を作ってくれます。

しかし、道の維持費は村が支払うので、村人達は境界線をできるだけ短くしたいと考えています。さらに、村人達はすべての集落の間を行き来できる状態を維持しつつ、境界線上にない道を廃止することで、道の長さの合計を最小にすることにしました。

集落の位置と元々あった道の情報が与えられる。境界線上に道を置き、かつ、すべての集落が行き来できるようにした場合の、道の長さの合計の最小値を計算するプログラムを作成せよ。ただし、集落は大きさのない点、道は幅のない線分とする。

Input

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

V R
x1 y1
x2 y2
:
xV yV
s1 t1
s2 t2
:
sR tR

１行目に集落の数 V (3 ≤ V ≤ 100) と道の数 R (2 ≤ R ≤ 1000) が与えられる。

続く V 行に集落を表す点の情報が与えられる。各行に与えられる２つの整数 xi, yi (-1000 ≤ xi, yi ≤ 1000)は、それぞれ i 番目の集落の x 座標、y座標を表す。

続く R 行に元々あった道の情報が与えられる。各行に与えられる２つの整数 si, ti (1 ≤ si < ti ≤ V)は、i 番目の道が si 番目の集落と ti 番目の集落をつないでいることを表す。

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

i ≠ j ならば、i 番目の集落と j 番目の集落の座標は異なる。

どの２つの集落についても、それらを直接結ぶ道は高々１つしか現れない。

２つの異なる道が端点以外の点を共有することはない。

３つ以上の集落が同一直線上に並んでいることはない。

Output

条件を満たす道の長さの合計の最小値を１行に実数で出力する。ただし、誤差がプラスマイナス 0.001 を超えてはならない。この条件を満たせば小数点以下何桁表示してもよい。

Sample Input 1

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

Sample Output 1

11.4142

Sample Input 2

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

Sample Output 2

18.2521