alexjercan/bugnet huggingface dataset:
椅子の総数

選手のみなさん、パソコン甲子園にようこそ。パソコン甲子園の本選は会津大学で行われ、会場内では
１つの机に１チームが割り当てられます。パソコン甲子園は１チーム２人なので、チーム数×２脚の椅子が必要です。大学では、他にも様々なイベントの会場設営で机と椅子を準備する機会がありますが、必要な机と椅子の数も様々です。そこで、あるイベントに対して準備する机の数と、机１つあたりに必要な椅子の数が与えられたとき、必要な椅子の総数を計算するプログラムを作成してください。

入力

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

d c

入力は１行であり、必要な机の数 d (1 ≤ d ≤ 100) と机１つあたりに必要な椅子の数 c (1 ≤ c ≤ 10) を表す整数が与えられる。

出力

イベントにおいて必要な椅子の総数を１行に出力する。

入出力例

入力例１

20 2

出力例１

40

入力例２

1 1

出力例２

1
お財布メタボ診断

４月に消費税が８％になってから、お財布が硬貨でパンパンになっていませんか。同じ金額を持ち歩くなら硬貨の枚数を少なくしたいですよね。硬貨の合計が１０００円以上なら、硬貨をお札に両替して、お財布のメタボ状態を解消できます。

お財布の中の硬貨の枚数が種類ごとに与えられたとき、硬貨をお札に両替できるかどうかを判定するプログラムを作成してください。

入力

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

c1 c5 c10 c50 c100 c500

入力は１行からなる。c1、c5、c10、c50、c100、c500 (0 ≤ c1, c5, c10, c50, c100, c500 ≤ 50) は、それぞれ、1円、5円、10円、50円、100円、500円硬貨の枚数を表す。

出力

硬貨をお札に両替できるなら1 を、そうでなければ 0 を１行に出力する。

入出力例

入力例１

3 1 4 0 4 1

出力例１

0

入力例２

2 1 4 3 2 3

出力例２

1

入力例３

21 5 9 3 1 1

出力例３

0

入力例４

2 4 3 3 3 1

出力例４

1

入力例５

50 50 50 4 0 0

出力例５

1
残り物には福がある

K 個の石から、P 人が順番に１つずつ石を取るゲームがあります。P 人目が石を取った時点で、まだ石が残っていれば、また１人目から順番に１つずつ石を取っていきます。このゲームでは、最後の石を取った人が勝ちとなります。K とP が与えられたとき、何人目が勝つか判定するプログラムを作成してください。

入力

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

N
K1 P1
K2 P2
:
KN PN

１行目にはゲームを行う回数 N (1 ≤ N ≤ 100) が与えられる。続く N 行に、i 回目のゲームにおける石の個数 Ki (2 ≤ Ki ≤ 1000) と、ゲームに参加する人数 Pi (2 ≤ Pi ≤ 1000) が与えられる。

出力

それぞれのゲームについて、何人目が勝つかを１行に出力する。

入出力例

入力例

3
10 3
2 10
4 2

出力例

1
2
2
路線バスの時刻表

バスマニアの健次郎君は、Ａ市内のバスをよく利用しています。ある日ふと、健次郎君の家の前のバス停から出発するすべてのバスを写真に収めることを思い立ちました。このバス停には飯盛山行きと鶴ケ城行きの２つのバス路線が通ります。各路線の時刻表は手に入れましたが、１つの時刻表としてまとめた方がバス停で写真が撮りやすくなります。

健次郎君を助けるために、２つの路線の時刻表を、０時０分を基準として出発時刻が早い順に１つの時刻表としてまとめるプログラムを作成してください。

入力

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

N h1 m1 h2 m2 ... hN mN
M k1 g1 k2 g2 ... kM gM

１行目に、飯盛山行きのバスの数を表す整数 N (1 ≤ N ≤ 100) と、それに続いて飯盛山行きのバス出発時刻が早い順に与えられる。出発時刻は整数 hi (0 ≤ hi ≤ 23) と mi (0 ≤ mi ≤ 59) からなり、hi 時 mi 分に i 番目のバスが出発することを表す。２行目に、鶴ケ城行きのバスの数を表す整数 M (1 ≤ M ≤ 100) と、それに続いて鶴ケ城行きのバス出発時刻が早い順に与えられる。出発時刻は整数 ki (0 ≤ ki ≤ 23) と gi (0 ≤ gi ≤ 59) からなり、ki 時 gi 分に i 番目のバスが出発することを表す。同じ路線には、同じ時刻に出発するバスはないものとする。

出力

２つの路線の時刻表を、０時０分を基準として出発時刻が早い順に１つにまとめた時刻表を１行に出力する。ただし、同じ時刻に複数のバスが出発するときは１つだけを出力する。出発時刻の時と分を : で区切る。分が１桁のときは左に０をひとつ加えて２桁で出力する。時刻と時刻の間は空白1 つで区切る。

入出力例

入力例１

2 9 8 15 59
1 8 27

出力例１

8:27 9:08 15:59

入力例２

2 0 0 21 0
3 7 30 21 0 23 7

出力例２

0:00 7:30 21:00 23:07
鉄道路線II

わたしの住む街には、図のような N 個の駅からなる円環状の鉄道路線があります。この路線の各駅には 0 から N-1 までの番号が順番に割り当てられていて、隣の駅まで100 円で移動することができます。移動はどちらの方向にでも可能です。

わたしはこの路線上のいくつかの駅で買い物をしたいと思っています。そこで、プログラムを作成して移動費を計算することにしました。ある駅を始点として、買い物をするすべての駅を訪問する最小の費用（円）を求めるプログラムを作成してください。ただし、同じ駅を何度訪問しても良く、どのような順番で駅を訪問しても構いません。

入力

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

N M p
d1
d2
:
dM

1行目に駅の数 N (2 ≤ N ≤ 100000)、買い物をする駅の数 M (1 ≤ M ≤ 10000 かつ M < N)、出発する駅の番号 p (0 ≤ p ≤ N-1) が与えられる。続く M 行に買い物をする駅の番号 di (0 ≤ di ≤ N-1) が与えられる。ただし、diは全て異なり、p もまたどの di とも異なるものとする。

出力

最小の費用を１行に出力する。

入出力例

入力例１

5 4 0
1
2
3
4

出力例１

400

入力例２

7 2 1
6
2

出力例２

400
フロッピーキューブ

フロッピーキューブをプログラミングで解いてみましょう。フロッピーキューブは図のように表面に色のついた９個の立方体から構成されている立体パズルで、キューブの列を回転させることによって、６つの各面の色をそろえます。

フロッピーキューブに対しては下図のような４種類の操作を行うことができ、一回の操作で、端にある３つの隣接したキューブを１８０度回転することができます。わかりやすいように、図では、上面に＋(赤色)、下面に＊(緑色)、右前面に□(黄色)、左前面に●(青色)、右奥面に○(水色)、左奥面に■紫色) の記号が付いている状態を初期状態としています。

フロッピーキューブの初期状態が与えられるので、パズルを解くために必要な最小の操作回数を求めるプログラムを作成してください。

入力

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

N
puzzle1
puzzle2
:
puzzleN

１行目のN (1 ≤ N ≤ 30) は操作回数を計算したいパズルの数である。続くN行に各フロッピーキューブの初期状態 puzzlei が与えられる。puzzlei は以下の形式で与えられる。

p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28 p29 p30

各フロッピーキューブの情報は 30 個の整数 pi (1 ≤ pi ≤ 6) からなる。pi は、下図のようにフロッピーキューブの各面に番号 i を振ったときの、そのキューブの面の色を表す。

パズルは、多くとも８回の操作で解くことができると仮定してよい。

出力

パズルごとに、最小の操作回数を１行に出力する。

入出力例

入力例

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

出力例

0
1
2
7
バトンリレーゲーム

アカベ高校では、毎年全校生徒が参加するゲームを行っています。まず、校庭に N 人の全校生徒が円形に並びます。図のように、各生徒は 0 から N-1 までの番号が書かれたゼッケンを付けています。

ゲームではバトンを１本使い、最初はゼッケン 0 番の生徒がバトンを持っています。そこから、以下の手順を M 回繰り返します。まず、現時点でバトンを持っている生徒が適当な正の整数 a を宣言します。a が偶数のときは時計回り、奇数のときは反時計回りに隣の生徒にバトンを渡していき、a 番目にバトンを受け取った生徒が脱落します。脱落した生徒は、時計回りで隣の生徒にバトンを渡し、円から抜けます。

ゲームが終わった後に円に残った生徒は、放課後の掃除が１年間免除されます。しかし、ここ数年は生徒数が増えたため、全校生徒を集めるのが難しくなってきています。そこで、競技プログラミング部のあなたは、シミュレーションで掃除が免除される生徒を求めるプログラムを作成するよう頼まれました。

指定した生徒が掃除を免除されているかどうかを質問したとき、それに答えるプログラムを作成してください。

入力

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

N M Q
a1 a2 ... aM
q1 q2 ... qQ

入力は３行であり、１行目に生徒の人数 N (10 ≤ N ≤ 200000)、繰り返し回数 M (5 ≤ M < N)、生徒が掃除を免除されるかどうかを問い合わせる質問の個数 Q (1 ≤ Q ≤ 1000) が与えられる。続く１行に、i 回目の繰り返しで最初にバトンを持っている生徒が宣言する整数ai (1 ≤ ai ≤ 100) が与えられる。続く１行に、質問としてゼッケン番号 qi (0 ≤ q < N) が与えられる。

出力

質問ごとに、ゼッケン番号 qi の生徒が掃除を免除されるかどうかを i 行目に出力する。掃除が免除されるなら 1 を、されないなら 0 を出力する。

入出力例

入力例

10 5 3
2 6 5 18 3
3 0 5

出力例

1
0
1
天体観測

ある晴れた夜の帰り道、空を見上げるとそこには無数の星。強く輝く星々、かすかに見える星々、いろ
いろな明るさの星々が夜空を彩っています。

あなたはふと思いました。この星空に自分の星座があったらどんなに素敵だろうと。そこであなたはひとつの基準を決め、部屋の窓から見える星々を適当につなげて自分の星座を作ることにしました。その基準とは、「どの２つの星を選んでも、それらの明るさの差がある定数 d 以下になるような星のグループを作り、その中で一番大きいものを自分の星座にしよう！」というものです。例えば、図のような窓から見える夜空を考えてみましょう（外側の長方形は窓枠です）。

この夜空には、明るさがそれぞれ 1，12, 2，4，1，8, 3，5，4 の９つの星がありますが、d = 2 とすると例えば以下のような３つの星座 A, B, C ができます。

大きさが 12 の星座 A
大きさが 10 の星座 B
大きさが 16 の星座 C

星座の大きさを次のように決めることにしました。ある星座の星をすべて含むような、窓枠に平行な辺からなる長方形のうち、面積が最も小さいものを選びます。この長方形の面積をその星座の大きさとします。例えば、上の夜空では星座 A, B, Cの大きさはそれぞれ12, 10, 16になるので、星座Cが最も大きい星座となります。

N 個の星の位置と明るさ、および整数 d が与えられたとき、一番大きい星座の面積を求めるプログラムを作成してください。星の位置は窓枠の左下隅を原点とした座標で与えられ、軸は図のような向きとします。星座を構成する星が１つの場合や、星々が軸に平行な直線上にある場合は、その星座の面積は 0 となることに注意してください。

入力

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

N d
x1 y1 b1
x2 y2 b2
:
xN yN bN

1 行目に星の数 N (1 ≤ N ≤ 200000) と整数 d (0 ≤ d ≤ 109) が与えられる。続く N 行に、i 番目の星の座標を表す整数 xi (0 ≤ xi ≤ 2000000) と yi (0 ≤ yi ≤ 2000000)、明るさを表す整数 bi (0 ≤ bi ≤ 109) が与えられる。入力される星の座標はすべて異なる。

出力

一番大きい星座の面積を１行に出力する。

入出力例

入力例

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

出力例

16
力持ち

力持ちたちが集う力持ち学園がありました。力持ち学園の運動会では、力持ちたちが隊列を組んで行進します。

力持ちたちは常に自分たちの力を誇示したい一方で、彼らの大半は自分で歩きたくありません。そこで彼らの一部が一番下になり、その上に大勢の人を縦一列に持ちあげて歩くことで、実際に歩く人数を減らそうと考えました。

はじめに、N 人の力持ちは地面の上に横一列に並んでいて、それぞれ左側から １,２,３,..., N と通し番号で呼ばれています。通し番号 i の力持ちの体重は wi で最大 ci の重量まで持つことができます。

力持ちは、以下の条件をすべて満たすときだけ、隣に立っている左右どちらかの力持ちを持ちあげることができます。

自分の上下には力持ちはいない。つまり、誰かに持ち上げられてもいないし、誰かを持ちあげてもいない。

隣の力持ちの体重が、自分が持つことのできる最大の重量以下である。ただし、隣の力持ちが既に誰かを持ち上げているなら、縦に積み上がった力持ちたちの体重の合計が、自分が持つことのできる最大の重量以下でなければならない。

例えば、次のような３人の力持ちの隊列を考えてみましょう。

下図のように、２の力持ちが持つことのできる重さが w3 以上のとき、２の力持ちは３の力持ちを持ちあげることができます。続いて、１の力持ちが持つことのできる重さが w2 + w3 以上のとき、１の力持ちは２の力持ちを持ちあげることができます。

→

また、下図のように３の力持ちが２の力持ちを持ちあげた場合は、１の力持ちの隣が、２の力持ちを持った３の力持ちになるので、１の力持ちは３の力持ちを持ちあげることができます。

→

２の力持ちが、下の図のように１と３の力持ちを両方持つことはできません。

力持ち学園の専属プログラマーとして、一番下で歩くことになる最小の人数を求めてください。

入力

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

N
c1 w1
c2 w2
:
cN wN

1 行目に力持ちの人数 N (1 ≤ N ≤ 1000) が与えられる。続く N 行に i 番目の力持ちが持てる重量の最大値 ci (1 ≤ ci ≤ 100000) と体重 wi (1 ≤ wi ≤ 100000) が与えられる。

出力

最小の人数を１行に出力する。

入出力例

入力例１

3
150 120
100 50
80 100

出力例１

1

入力例２

8
50 100
20 20
30 20
90 50
140 30
30 60
59 120
10 10

出力例２

3
学食

今日はＺ大学のオープンキャンパスです。毎年この日の昼休みには、大勢の高校生たちが学食に列をつくります。そこでＺ大学の事務局は、行列の長さが最大でどのくらいの距離になるかを予測することにしました。事前調査の結果で、以下のことが分かっています。

行列にはそれぞれ 1 から N までの番号が振られた N 人が並びます。

C 個の高校生のペア (ai, bi) それぞれについて、以下の２種類の制約があります：

１つ目の制約は順序に関するもので以下のいずれかです：

ai は bi よりも先、または同じ位置に並ばなくてはならない

ai は bi よりも後、または同じ位置に並ばなくてはならない

ai は bi より先でも、同じ位置でも、後でもよい

２つ目の制約は距離に関するもので以下のいずれかです：

ai と bi は di メートル以上離れなければならない

ai と bi は di メートル以内に並ばなければならない

また、先頭から同じ距離の場所に複数の人が並ぶことができ、行列の先頭には常に番号 1 の人が並ぶことが分かっています。

与えられた C 個の制約をすべて満たす行列について、先頭から最後尾までの距離が最大となるような並び方をした場合の距離を求めるプログラムを作成してください。ただし、どこまでも離れることができる場合は inf と、制約を満たす並び方が不可能な場合は -1 と出力してください。

入力

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

N C
constraint1
constraint2
:
constraintC

1 行目に行列に並ぶ高校生の人数 N (2 ≤ N ≤ 100) と制約の数 C (0 ≤ C ≤ 200) が与えられる。続く C 行に各制約 constrainti が次の形式で与えられる。

aioibisidi

制約には空白は含まれない。ai, oi, bi, si, di の意味を以下に示す。

ai と bi (1 ≤ ai, bi ≤ N かつ ai ≠ bi ) は高校生の番号、di は距離 (0 ≤ d ≤ 10000) を表す整数である。

oi は順序の制約を指定する <=、>=、* のいずれかの文字列であり、<= の場合「ai は bi よりも先、または同じ位置に並ばなくてはならない」、>= の場合「ai は bi よりも後、または同じ位置に並ばなくてはならない」、* の場合「ai は bi より先でも、同じ位置でも、後でもよい」ことを意味する。ただし oi が * となる制約は７個以上与えられることはない。

si は距離の制約を指定する + または - の文字であり、+ の場合「ai と bi は di メートル以上離れなければならない」、- の場合「ai と bi は di メートル以内に並ばなければならない」ことを意味する。

ただし、あるペアに対して複数の制約が与えられることはないものとする。

出力

先頭から最後尾までの距離を１行に出力する。

入出力例

入力例１

3 2
1<=2-1
2<=3-2

出力例１

3

入力例２

3 3
1<=2-1
2<=3-2
1<=3+4

出力例２

-1

入力例３

3 2
1<=2-2
2*3+1

出力例３

inf
有益氏のオーディオルーム

数学者である有益氏の趣味は音楽鑑賞で、家に念願のオーディオルームを作りました。完成したオーディオルームで、友人を招いてお披露目会を開きたいと考えています。全員にできるだけ良い音で聴いてもらいたいので、部屋の中の何か所かで音を計測し、友人たちの位置での音の質を計算するつもりです。

計測点は、下の図の円弧と線分の交点である 1 番から 35 番までの点から選択します。１つの線分上にある点は、オーディオシステムからの距離が 100ｃｍから 500ｃｍまで 100ｃｍずつ離れて並んでいます。１つの円弧状にある点は、もっとも右のもの（1 番から 5 番までの点）から反時計回りに、0°から 180°
の範囲で 30°度刻みに並んでいます。

このような円弧と線分に囲まれた領域内のどこかに友人が居ることになるので、友人の居る位置によっ
て必要な計測点を選択します。友人の位置は、円弧に沿って反時計回りに測った角度とオーディオシス
テムからの距離で与えられます。必要な計測点は以下のように１点か、２点か、４点が選ばれます。

友人がちょうど計測点の位置にいれば、その１点を選びます。この図の例の場合、選ばれるのは 23 番の点です。

友人が円弧（または線分）の上にちょうど乗っていれば、その円弧（または線分）上にある、友人に最も近い２点を選びます。この図の例の場合、選ばれるのは 18 番と 23 番の点です。

友人が円弧と線分によって囲まれた区画の内側（円弧や線分の上ではない）にいれば、区画を作っている４点を選びます。この図の例の場合、選ばれるのは 17、18、22、23 番の点です。

有益氏を助けるために、必要な計測点の番号を求めるプログラムを作成してください。

入力

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

N
r1 t1
r2 t2
:
rN tN

１行目に友人の数 N (1 ≤ N ≤ 50)が与えられる。続く N 行に、友人の位置が与えられる。友人の位置 ri (100 ≤ ri ≤ 500) はオーディオシステムからの距離を表す整数、ti (0 ≤ ti ≤ 180) は円弧に沿って反時計回りに測った角度を表す整数である。

出力

各友人の位置について、計測点の番号を昇順で１行に出力する。

入出力例

入力例

4
300 120
300 105
250 105
250 90

出力例

23
18 23
17 18 22 23
17 18
対称３進数

1 グラム、3 グラム、9 グラム、27 グラムのおもりが１つずつあれば、天びんを使って 1 グラムから 40グラムまで 1 グラム刻みで量れることが知られています。たとえば、天びんの一方の皿に重さを量りたいものと 3 グラムのおもりを載せ、もう一方の皿に 27 グラムと 1 グラムのおもりを載せて釣り合えば、量りたいものの重さは 27-3+1=25 グラムだとわかります。 さらに、1(=30)グラム、31 グラム、... 、3n-1 グラム、3n グラムまでのおもりが１つずつあれば、天びんを使って(3n+1-1)/2グラムまで量れることが知られています。また、天びんが釣り合うようなおもりの置き方は一通りしかないことも知られています。

量りたいものとおもりを天びんに置いて、釣り合うようなおもりの置き方を文字列で表すことができます。3i グラムのおもりを量りたいものと同じ皿に載せたときは「-」、もう一方の皿に載せたときは「+」、どちらにも載せなかったときは「0」を文字列の右端からi番目に書きます（右端を０番目と数えます）。たとえば、先ほどの 25 グラムの例は +0-+ と表わせます。

それでは、量りたいものの重さが与えられたとき、天びんが釣り合うようなおもりの置き方を表す文字列を出力するプログラムを作成してください。ただし、３のべき乗グラムのおもりは、どのような重さのものでも必ず１つあるものとします。

（補足： 対称３進数について）

量りたいものの重さがwのとき、おもりの置き方を表す文字列はwの対称３進数になっています。対称３進数とは、３のべき乗の数で位取りを行い、各位に数 1、0、-1 を表す文字を書くことで表した数のことです。上の文字列では、文字「+」、「0」、「-」がそれぞれ数 1、0、-1 に対応します。たとえば、25 グラムのものを量るときのおもりの置き方が +0-+ である対称３進数が表す数は、1 × 33 + 0 × 32 - 1× 31 + 1 × 30 = 25 となります。

入力

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

w

w (1 ≤ w ≤ 100000) は量りたいものの重さを表す整数である。

出力

おもりの置き方を表す文字列を出力する。ただし文字列の左端を 0 にしてはならない。

入出力例

入力例１

25

出力例１

+0-+

入力例２

2

出力例２

+-

入力例３

5

出力例３

+--
ニッシン館マラソン部

アイヅ市立ニッシン館は、文武両道を掲げる歴史ある学校です。ニッシン館マラソン部は熱血指導で有名であり、決められた練習時間の間、周回コースをひたすら走るという鬼の特訓を行います。このとき、脱水症状で倒れる部員がいないように、部員の実力に合わせて飲み物を提供する給水所を設けています。

各部員が１単位時間あたりに走れる距離(ペース)は部員ごとに決まっており、全員が１単位時間ごとに必ず給水できるように給水所を設けたうえで特訓を行います。部員は 1 単位時間で着いた給水所で必ず中身の入った容器を取り、そのまま走り続けます。さらに、次の１単位時間で着いた給水所で空の容器を置き、中身の入った容器を取って走り続けるということを繰り返します。また、空の容器は、置いてから 1 単位時間の時点で飲料が補充され、その瞬間から誰にでも提供できるようになります。

部員は全員同じ地点から、容器を持たずに出発します。決められた練習時間まで走ると練習を終えます(このときも給水が必要です)。複数の部員が同時に同じ給水所に到着する場合もあるので、一か所の給水所で同時に複数の容器が必要になることもあります。

鬼の特訓を安全に行うために、最低いくつの給水容器が必要になるか求めるプログラムを作成してください。

入力

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

N R T
p1
p2
:
pN

１行目に部員の数 N (1 ≤ N ≤ 100)、周回コースの長さ R (1 ≤ R ≤ 1000)、決められた練習時間 T (1 ≤ T ≤ 1000) が与えられる。続く N 行に、部員 i のペース pi (1 ≤ pi ≤ 1000) が与えられる。

出力

最低いくつの給水容器が必要になるかを１行に出力する。

入出力例

入力例１

1 10 20
1

出力例１

11

入力例２

2 5 12
1
2

出力例２

8
デッドロックを検出せよ

コンピュータにおける「データベース」とは、情報を管理するための入れ物で、「データベースマネジメントシステム(DBMS)」とは、その管理をする仕組みです。複数のユーザが利用するデータベースでは、DBMS は慎重に構築する必要があります。

例えば、倉庫から商品を１つ取り出した人が、データベースに対して以下の処理を行うとしましょう。

(1) 商品の個数 N をデータベースから読む。

(2) 新たな商品の個数 N-1 をデータベースに書き込む。

ユーザ１が(1)を終えて(2)を始める前に、別のユーザ２が倉庫から商品を取り出して(1)を行ったとします。ユーザ２もユーザ１と同じ個数を読むので、２人が(2)を終えたときには商品は２個減るのにデータベース上では１個しか減らないというおかしな結果になります。このような問題を防ぐために、DBMS は特定のデータを操作中のユーザに、そのデータを「ロック」する権利を与えます。ロックされていれば、他のユーザはその値を操作できなくなるので、おかしな結果を返すことはなくなります。

これで安全に操作できることは保証されますが、今度は別の問題が起こります。例えば、ユーザ１とユーザ２が以下のような順番でデータＡとＢをロックしようとしたらどうなるでしょうか？

(1) ユーザ１がデータＡのロックを試みる → 成功（データＡがロック中になる）

(2) ユーザ２がデータＢのロックを試みる → 成功（データＢがロック中になる）

(3) ユーザ１がデータＢのロックを試みる → データＢがロック中なのでユーザ１は待つ

(4) ユーザ２がデータＡのロックを試みる → データＡがロック中なのでユーザ２は待つ

(4)を実行した時点では、ユーザ１がＡ、ユーザ２がＢをロックしているので、(3)(4)は永久に成功しませ
ん。これを「デッドロック」と呼びます。DBMS はこれを検出しなければなりません。

ある時点でデッドロックが起きているかどうかは、その時点でのすべてのユーザとデータの依存関係を書き、循環ができているかどうかで判断できます。依存関係は，ユーザがデータをロック済みの場合はデータからユーザの向きに矢印を、ユーザがデータのロックを試行していて待ち状態になっている場合はユーザからデータの向きに矢印を書くことで表します。

上の(1)から(4)の例であれば、(4)を実行した時点での依存関係は右上のような図になります。このとき、矢印の方向に進むと、ユーザ１→データＢ→ユーザ２→データＡ→ユーザ１という循環ができているため、デッドロックが起きていることがわかります。DBMS の苦労を体験するため、あなたにここでやってもらいたいのは、このようなデッドロックを検出するプログラムを作成することです。

入力

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

N
rel1
rel2
:
relN

１行目にユーザとデータの依存関係の数 N (1 ≤ N ≤ 1000) が与えられる。続く N 行に、ユーザとデータの依存関係 reli が与えられる。依存関係は lock と wait の２種類あり、各 reli は以下のいずれかの形式で与えられる。

u lock d

または

u wait d

u lock d は、ユーザ u (1 ≤ u ≤ 100) が、データ d (1 ≤ d ≤ 100) をロック済みであることを表す。

u wait d は、ユーザ u (1 ≤ u ≤ 100) が、データ d (1 ≤ d ≤ 100) のロックを試行していて待ち状態であることを表す。

ただし、入力は以下の条件を満たしていると仮定してよい。

ロックされていないデータに対して、ユーザが待ち状態ではない。

二人以上のユーザにロックされているデータはない。

ユーザ自身がロックしているデータに対して、待ち状態ではない。

同じ依存関係は与えられない。

出力

デッドロックが発生しているなら 1、発生していないなら 0 を１行に出力する。

入出力例

入力例１

4
1 lock 1
2 lock 2
1 wait 2
2 wait 1

出力例１

1

入力例２

4
3 lock 3
2 wait 3
3 lock 4
2 wait 4

出力例２

0
新薬開発

英世博士は日々研究を行い、新しい薬を開発しようとしています。新薬を開発するためには、色々な物質を組み合わせて薬を作り試験を行い、良い薬を見つけなければなりません。様々な組み合わせを試していくうちに、英世博士は物質の組み合わせが樹形図で表せることを突き止めました。

右の図は、薬の調合を表す樹形図の例です。図の中で丸く囲まれたものを物質ノード、三角で囲まれたものを選択ノードと呼びます。物質ノードは物質を表します。選択ノードは、物質の選択を表すもので、それ自体は物質を表しません。選択ノードには or 型（∨が付いたもの）と alt 型（⇔が付いたもの）の２種類があります。また ? が付いたノードは、それがオプションであることを表します。ただし、選択ノードの子ノード（下向きの枝の先にあるノード）がオプションになることはありません。樹形図に現れる異なる物質ノードは、それぞれ別の物質を表すものとします。

薬の調合を行うときは、樹形図の一番上のノードからはじめて、順々にノードをたどっていきながら以下のようにしてノードを選んでいきます。

たどり着いたノードがオプションでない物質ノードなら、それを必ず選ぶ。

オプションの物質ノードなら、それを選ぶかどうかは任意。

or 型の選択ノードなら、その子から少なくとも一つを選ぶ。ただし、その選択ノードがオプションなら、子を一つも選ばなくてもよい。

alt 型の選択ノードなら、その子から一つだけを選ぶ。ただし、その選択ノードがオプションなら、子を選ばなくてもよい。

あるノードが選ばれたときだけ、そのノードから下に向かう枝をそれぞれたどっていきます。選ばれなければ、それらをたどることはありません。

あなたは英世博士から、薬の物質の組み合わせを表す樹形図を受け取り、組み合わせの数が全部で何通りあるか求めるよう指示されました。樹形図が与えられたとき、組み合わせの総数を出力するプログラムを作成してください。

入力

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

N
node1
node2
:
nodeN
s1 t1
s2 t2
:
sN-1 tN-1

１行目にノードの数 N (1 ≤ N ≤ 1000) が与えられる。続く N 行に、i 番目のノードの情報 nodei が与えられる。１番目のノードを樹形図の一番上のノードとする。続く N-1 行に si 番目のノードからその子である ti 番目のノード (1 ≤ si ≠ ti ≤ N) へ向かう枝が与えられる。t1 から tN-1 までには、2 から N までの数が一度だけ現れる。

ノードの情報は以下の形式である。

E オプションでない物質ノード。

E? オプションである物質ノード。

type オプションでない選択ノード。type は A か R のいずれかで、A は alt型、R は or 型を表す。

type? オプションである選択ノード。type の形式は同上。

入力から得られる樹形図は、以下の条件を満たす。

選択ノードは２つ以上の子ノードを持つ。

選択ノードの子ノードはオプションでない。

樹形図の一番上のノードはオプションでない。

どのノードについても、子ノードの数は 10 を超えない。

出力

与えられた樹形図から得られるすべての組み合わせの総数を１行に出力する。ただし、出力すべき値は非常に大きくなりうるので、代わりに 1,000,000,007 で割った余りを出力する。

入出力例

入力例１

12
A
E
E
E
R?
E?
E?
E
E
E
E?
E
1 2
1 3
1 4
2 5
4 6
4 7
5 8
5 9
7 10
7 11
11 12

出力例１

11

入力例２

10
E
R?
E
R
E
E
A
E
E
E
1 2
1 7
2 3
2 4
4 5
4 6
7 8
7 9
7 10

出力例２

24
枠

画像の中から有益な情報を抽出する画像認識はコンピュータサイエンスの中でも重要な研究テーマのひとつです。デジタルカメラ、運転支援システム、防犯システムなどに幅広く応用されています。

このような研究のおかげで、私たちは画像解析を行うための多くのソフトウェアやプログラム集を使い様々な処理を行うことができます。一方、自力でプログラムを書いて解析することで、その仕組みを知り、楽しい時間を過ごすことができます。ここでは、一風変わった画像認識をしてみましょう。

画像として次のような各ピクセルが整数の値を持つ N × N のピクセルが入力として与えられます。この画像の中から、線の太さが１ピクセルの長方形の枠（わく）を１つ抽出します。

枠が覆うピクセルの値の和が最大となるような枠を抽出して、その和を報告するプログラムを作成して
下さい。ただし、下の図のように、縦、横のピクセル数が１つや２つの場合も枠とみなすものとします。

入力

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

N
p1,1 p1,2 ... p1,N
p2,1 p2,2 ... p2,N
:
pN,1 pN,2 ... pN,N

１行目に縦と横のピクセル数 N (1 ≤ N ≤ 300) が与えられる。続く N 行に、i 行 j 列目のピクセルの値を表す整数 pi,j (-1000 ≤ pi,j ≤ 1000)が与えられる。

出力

ピクセル値の和が最大となるような枠の、ピクセル値の和を１行に出力する。

入出力例

入力例１

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

出力例１

12

入力例２

3
0 0 0
0 -1 0
0 0 0

出力例２

0
かぐや

いよいよ今月末に「はやぶさ２」が打ち上げられます。４年前に「はやぶさ」が帰ってきたときは、日本中が盛り上がったのを覚えている人も多いと思います。７年前には、「かぐや」が打ち上げられ、月の周りを回りながらたくさんの鮮明な画像を地球に送ってくれました。

上の図は、地球を原点とした空間座標（z軸は紙面から垂直に下から上に向いているものとします）に、月の軌道といくつかの月の位置、月の周りを回るかぐやの軌道を描いたものです。月の軌道は、x軸とy軸を通る平面上にある、原点を中心とする円とします。月の周りを回るかぐやの軌道は、x軸とz軸を通る平面に平行な平面上にある円とし、その中心は月の中心と一致します。月は、その軌道に沿って描かれた矢印の方向に回っているものとします。

右の図で、月の位置はＡ，Ｂ，Ｃの３つが描かれています。月を横切る直線がかぐやの軌道です。かぐやは月の周りを回っているので軌道は円ですが、z軸の正の方向から見ているので、図のx軸に平行な直線に見えます（月の位置が変わっても、つねにx軸に平行であることに注意してください）。かぐやは、その軌道上に描かれた矢印の方向に回っているものとします。

かぐやが地球から見て月の裏側に隠れてしまうと、地球と直接通信ができなくなります。かぐやの管制を担当するあなたは、かぐやが月の裏側に隠れる時間が、与えられた時間の中でどれだけになるかをプログラムで求めようとしています。

月の地球に対する位置と分単位での時間tが与えられたとき、その位置から始めてt分後までの間に、かぐやが月の裏側に隠れる時間を求めるプログラムを作成してください。ただし、地球とかぐやは点、月は半径 1800 km の球と考えます。月は半径 380000 km の軌道を 2500000 秒で一周し、かぐやは月の表面から高度 100 km の円上を２時間で一周するものとします。かぐやの最初の位置は、かぐやの軌道がz座標で最大の値をとる位置とします。

入力

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

m t

m (0 ≤ m < 360) は月の位置を上の図のx軸の正の部分からy軸の正の部分に向かって反時計回りに測った角度を整数で表したものである。t (1 ≤ t ≤ 10000) は分で測った時間を表す整数である。

出力

はじめの位置から t 分経過するまでの間に、かぐやが月の裏側に隠れる時間（分）を実数で出力する。ただし、誤差がプラスマイナス 1.0 分を超えてはならない。この条件を満たせば小数点以下何桁表示してもよい。

入出力例

入力例１

90 10

出力例１

0.0

入力例２

0 120

出力例２

47.73
ネットカフェ

あなたはネットカフェを経営しています。今日あなたは、顧客に指摘され続けている問題を解決しようと取り組んでいます。その問題とは、店舗の本棚の単行本が巻数順に並んでおらず、目的の単行本を探しだすのが面倒だという苦情です。

あなたの店舗で一番巻数の多い単行本は「名探偵 赤ベコ」（通称「赤ベコ」）です。あまりに長編なので、特別な本棚を「赤ベコ」のために用意しました。

単行本の各巻の重さと厚さは様々で、本棚の各段の幅と、各段に並べることができる本の重さの上限も様々です。あなたは、次の条件を満足するように本棚に本を並べることにしました。

1 巻からある巻までの「赤ベコ」が本棚に並んでいる。

それぞれの段には、巻数順に（途中で抜けている巻がないように）本が並ぶ。

各段に並べる本の重さの合計が、その段で定められた重さの上限を超えない。

各段に並べる本の厚さの合計が、その段の幅を超えない。

これらの条件を満たしたとき，この本棚に最大で何巻まで「赤ベコ」を並べることができるかを求めるプログラムを作成してください。

入力

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

M N
w1 t1
w2 t2
:
wM tM
c1 b1
c2 b2
:
cN bN

最初の１行に「赤ベコ」の巻数 M (1 ≤ M ≤ 200000) と本棚の段数 N (1 ≤ N ≤ 15) が与えられる。続く M 行に、「赤ベコ」の単行本 i 巻目の重さ wi (1 ≤ wi ≤ 100) と厚さ ti (1 ≤ ti ≤ 100) を表す整数が与えられる。続く N 行に、本棚の i 段目の重さの上限 ci (1 ≤ ci ≤ 108)と幅 bi (1 ≤ bi ≤ 108) を表す整数が与えられる。

出力

本棚に並べることができる最大の「赤ベコ」巻数を１行に出力する。

入出力例

入力例１

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

出力例１

3

入力例２

2 2
1 2
2 1
2 1
2 1

出力例２

0

入力例３

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

出力例３

2

入力例４

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

出力例４

3
未知の病原菌

英世博士は未知の病原菌を発見しました。この病原菌は、アクダマキンとゼンダマキンと呼ばれる二種類の菌が、一直線に連なった鎖状の構造をしています。人類のために、この病原菌を無害化したいと考えています。

この病原菌は、長さが２以下になると力が弱まり、免疫力によって無害化されることが分かっています。英世博士は、この病原菌を任意の場所で切断して、前半と後半の２つの鎖にすることができます。また、２つの鎖を連結して１つの鎖にすることもできます。

しかし注意しなければいけないのは、アクダマキンの数が多い鎖はきわめて有害だということです。ある鎖においてアクダマキンの数がゼンダマキンの数よりも多くなると、その瞬間アクダマキンは無制限に増殖を始めます。これは長さ２以下の鎖についても例外ではないので、慎重に鎖を切断していかなければなりません。

どの瞬間においてもアクダマキンの数の方が多いような鎖を作ることなく、一本の鎖を長さ２以下にして無害化することは可能でしょうか。英世博士は、助手であるあなたに無害化が可能かどうか判定するプログラムを作成するよう指示しました。無害化が可能ならばその操作を出力し、不可能ならば不可能であると出力するプログラムを作成してください。ただし、その操作のステップ数が最小である必要はありません。

入力

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

Q
str1
str2
:
strQ

1 行目に病原菌の数 Q (1 ≤ Q ≤ 300) が与えられる。続く Q 行に各病原菌の初期状態を表す 'o' (ゼンダマキン) および 'x' (アクダマキン) からなる１つの文字列 stri が与えられる。文字列 stri の長さは 1 以上 100 以下である。

出力

stri について、要求を満たす切断・結合操作の列が存在する場合、出力の最初の行にはその操作列の長さを表す整数 n を出力し、続く n 行に操作の内容を１行に１操作ずつ、最初の操作から順に出力する。

切断操作は以下の形式で表すこと。

split a p

a は切断する鎖の識別番号を表す整数であり、p はその鎖を切断する位置である。この操作の結果、鎖 a は先頭から p 番目（先頭を 0 から始める通し番号)の菌の直後で切断される。新しくできる２つの鎖のうち、前半のものに識別番号 m+1 が、後半のものに識別番号 m+2 が付与される（ここで、m はこれまでに付与された最も大きな識別番号を表す）。また、鎖 a は消滅する。

結合操作は以下の形式で表すこと。

join a b

a, b は結合する鎖の識別番号を表す整数である。この操作の結果、鎖 a の末尾に鎖 b の先頭を結合した新しい鎖が作られる。新しく作られた鎖には、識別番号 m+1 が付与される(ここで、m はこれまでに付与された最も大きな識別番号を表す)。また、鎖 a, b は消滅する。

入力として与えられる最初の鎖には、識別番号 0 が付与されている。

操作の結果、問題の要求を満たすように鎖が分解されていた場合、どのような操作でも正答と判定される。操作列の長さも必ずしも最短である必要はない。ただし、操作列の長さは 20000 以下でなければならない。データセットにおいて、鎖が分解可能な場合、必ずこの条件を満たす操作列が存在することが保証される。

不正な操作列が出力された場合、誤答と判定される。不正な操作列には、以下の場合が含まれる。

切断操作 split a p において、0 ≤ p < (鎖 a の長さ)-1 が満たされていない場合。

切断・結合操作の対象となる鎖の識別番号がまだ生成されていないものである場合や、既に別の操作の対象となったため消滅している場合。

結合操作 join a b において、a と b が等しい場合。

要求を満たす切断・結合操作の列が存在しない場合、"-1"と出力する。

入出力例

入力例

6
oooxxxx
ooooxxx
oxxooxxo
ooxx
oo
ooo

出力例

-1
7
split 0 0
join 2 1
split 3 4
split 4 0
join 7 6
split 8 2
split 9 0
3
split 0 1
split 2 1
split 4 1
-1
0
1
split 0 0

例えば、入力例の２番目の病原菌 ooooxxx は、

split 0 0 により o(1) と oooxxx(2) ができる。ここで、()内の数字は識別番号を表す。

join 2 1 により oooxxxo(3) ができ 1 と 2 は消滅する。

split 3 4 により oooxx(4) と xo(5) ができる。このとき{ oooxx(4), xo(5) }の鎖が存在する。

split 4 0 により o(6) と ooxx(7) ができる。{ xo(5), o(6), ooxx(7)}

join 7 6 により ooxxo(8) ができる。{ xo(5), ooxxo(8)}

split 8 2 により oox(9) と xo(10) ができる。{xo(5), oox(9), xo(10) }

split 9 0 により { xo(5), xo(10), o(11), ox(12) } となって終了する。
アカベコ国王の配慮

アカベコ国の国王には２人の王子がいます。国王は自分が退位するときに国を２つに分割し、それぞれの王子に一つずつ国を治めさせることにしました。新しい国の名前はアカ国とベコ国です。アカベコ国には N 個の町と、２つの町を繋ぐ M 本の道があります。国王は、以下の手順でアカベコ国の町と一部の道を２つの国に配分することにしました。

(1) 町を２つ選び、それぞれアカ国とベコ国に配分する。

(2) すでに配分された町sを選ぶ。さらに、町 s から１本の道で繋がっている、まだ配分されていない町 t を選ぶ。そして、町 s、t 間の道と町 t を、町 s が配分された国に配分する。

(3) (2)を、行えなくなるまで繰り返す。

実は２人の王子はあまり仲が良くないので、国王は２つの国の距離をなるべく大きくしたいと考えています。ここで、２つの国の距離とは、アカ国の町とベコ国の町を繋ぐ道の中で、最も短い道の長さです。

アカベコ国の町と道の情報が与えられたとき、分配後のアカ国とベコ国の距離の最大値と、そのような距離になる配分が何通りあるかを求めるプログラムを作成してください。ただし、２つの配分結果は、アカ国とベコ国に異なる町か道が配分された場合に区別されます。

入力

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

N M
s1 t1 d1
s2 t2 d2
:
sM tM dM

１行目は２つの整数からなる。N (2 ≤ N ≤ 100) は町の数、M (N-1 ≤ M ≤ N(N-1)/2) は道の数を表す。続くM 行に２つの町を繋ぐ道が与えられる。si と ti (1 ≤ si ≠ ti ≤ N) は i 番目の道が繋ぐ２つの町の番号を表す。di (1 ≤ di ≤ 109) は i 番目の道の長さを表す。

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

どの２つの町もいくつかの道を使い行き来が可能である。

どの２つの町の間にも２本以上の道はない。

同じ長さの道は５本以下である。

出力

分配後のアカ国とベコ国の距離の最大値と組み合わせの数を、空白区切りで１行に出力する。ただし、分配後の組み合わせの数は非常に大きくなりうるので、代わりに 1,000,000,007 で割った余りを出力する。

入出力例

入力例

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

出力例

7 18
参加者数

選手のみなさん、パソコン甲子園にようこそ。パソコン甲子園では、現在、プログラミング部門、モバイル部門、そして、いちまいの絵ＣＧ部門、計３部門の競技が開催されています。

各部門の参加者数が与えられたとき、参加者の総数を計算するプログラムを作成せよ。

Input

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

p m c

入力は１行であり、プログラミング部門の参加者数 p (0 ≤ p ≤ 10000)、モバイル部門の参加者数 m (0 ≤ m ≤ 10000)、いちまいの絵ＣＧ部門の参加者数 c (0 ≤ c ≤ 10000) が与えられる。

Output

参加者の総数を１行に出力する。

Sample Input 1

10 10 20

Sample Output 1

40

Sample Input 2

100 0 0

Sample Output 2

100

Sample Input 3

1000 1000 1000

Sample Output 3

3000
魚釣り競争

浩と健次郎の兄弟は猪苗代湖に魚釣りをしに来ました。二人は以下のように点数を決め、釣り上げた魚の合計得点で勝負することにしました。

イワナは１匹 a 点

ヤマメは１匹 b 点

イワナ１０匹ごとに c 点追加

ヤマメ２０匹ごとに d点追加

浩と健次郎が釣り上げた魚の数をもとに、どちらが勝ちか、あるいは引き分けか判定するプログラムを作成せよ。

Input

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

h1 h2
k1 k2
a b c d

１行目には、浩が釣り上げたイワナの数 h1 (0 ≤ h1 ≤ 100) とヤマメの数 h2 (0 ≤ h2 ≤ 100) が与えられる。２行目には、健次郎が釣り上げたイワナの数 k1 (0 ≤ k1 ≤ 100) とヤマメの数 k2 (0 ≤ k2 ≤ 100) が与えられる。３行目には、イワナ１匹ごとの点数 a(1 ≤ a ≤ 100)、ヤマメ１匹ごとの点数 b (1 ≤ b ≤ 100)、イワナ１０匹ごとの追加点数 c (0 ≤ c ≤ 100)、ヤマメ２０匹ごとの追加点数 d (0 ≤ d ≤ 100) が与えられる。

Output

浩が勝ちなら hiroshi、健次郎が勝ちなら kenjiro 、引き分けなら even と１行に出力する。

Sample Input 1

5 1
3 1
1 2 5 5

Sample Output 1

hiroshi

Sample Input 2

5 1
4 2
1 2 5 5

Sample Output 2

kenjiro

Sample Input 3

0 20
10 0
1 1 10 0

Sample Output 3

even
カエルはまっすぐ帰る

一匹のカエルが巣穴に帰ろうとしています。巣穴はカエルの D センチメートル前方にあって、カエルは巣穴に向かってまっすぐ進みます。カエルができる行動は、以下の２つだけです。

大ジャンプ（L センチメートル前方に進む）

小ジャンプ（１センチメートル前方に進む）

カエルは巣穴を跳び越すことなく、ちょうど巣穴に着地することをねらっています。

カエルが巣穴に帰るために、最低何回跳ぶ必要があるかを求めるプログラムを作成せよ。

Input

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

D L

入力は１行であり、巣穴までの距離 D (1 ≤ D ≤ 10000) と大ジャンプでカエルが進む距離 L (2 ≤ L ≤ 10000) が与えられる。

Output

カエルが最低何回跳ぶ必要があるかを、１行に出力する。

Sample Input 1

10 5

Sample Output 1

2

Sample Input 2

7 4

Sample Output 2

4
極秘調査

秘密の組織アイヅアナリティクス(AiZu AnalyticS)は、極秘の調査を開始した。ターゲットになっている人物は N 人いて、1 から N の識別番号が付けられている。AZAS 情報戦略調査員であるあなたは、
ターゲットの中から、以下の条件を少なくとも一つ満たす人物の数を割り出すことにした。

組織 $A$ に属さず、かつ、商品 $C$ を所持している者。

組織 $B$ に属し、かつ、商品 $C$ を所持している者。

組織 $A$ に属している者、組織 $B$ に属している者、商品 $C$ を所持している者の識別番号が入力として与えられたとき、条件を満たす人物の数を割り出すプログラムを作成せよ。ただし、どちらの条件も満たす人物を重複して数えないように注意せよ。

（補足：上記の条件について）

1 から $N$ までの自然数の集合から、いくつかの要素を選んだ集合を $A$，$B$，$C$ とする。条件を満たす人物の数は、$(\bar{A} \cap C) \cup (B \cap C)$ (図の塗られた部分) を満たす要素の個数である。ただし、$\bar{A}$ は集合 $A$ の補集合とする。

Input

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

N
X a1 a2 ... aX
Y b1 b2 ... bY
Z c1 c2 ... cZ

入力は４行であり、１行目に調査対象の人数 N (1 ≤ N ≤ 100) が与えられる。２行目に、組織 $A$ に属している者の数 X (0 ≤ X ≤ N)と、それに続いて組織 $A$ に属している者の識別番号 ai (1 ≤ ai ≤ N) が与えられる。３行目に、組織 $B$ に属している者の数 Y (0 ≤ Y ≤ N) と、それに続いて組織 $B$ に属している者の識別番号 bi (1 ≤ bi ≤ N) が与えられる。４行目に、商品 $C$ を所持している者の数 Z (0 ≤ Z ≤ N) と、それに続いて商品 $C$ を所持している者の識別番号 ci (1 ≤ ci ≤ N) が与えられる。

Output

条件を満たす人物の数を１行に出力する。

Sample Input 1

5
3 1 2 3
2 4 5
2 3 4

Sample Output 1

1

Sample Input 2

100
3 1 100 4
0
2 2 3

Sample Output 2

2
プログラミングコンテスト

今年も白虎大学でプログラミングコンテストが開催されることになりました。コンテストではいくつかの問題が出題され、それぞれ難易度に応じた得点が割り当てられています。

実行委員会は、解いた問題の数とそれらの得点の両方を考慮し、次のルールに基づいて各チームのスコアを計算することにしました。

「あるチームが正解した問題のうち、得点が A 以上であるものが A 問以上あることを満たすような最大の A を、そのチームのスコアとする」

あるチームが正解した問題の数と、それらの問題の得点から、チームのスコアを計算するプログラムを作成せよ。

Input

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

N
p1 p2 ... pN

１行目にチームが正解した問題の数 N (1 ≤ N ≤ 100) が与えられる。２行目に正解した各問題の得点 pi(1 ≤ pi ≤ 100) が与えられる。

Output

チームのスコアを１行に出力する。

Sample Input 1

7
5 4 3 10 2 4 1

Sample Output 1

4

得点が 4 以上の問題を 4 問以上正解しているので、スコアは 4 となる。

Sample Input 2

3
1 1 100

Sample Output 2

1

得点が 1 以上の問題を 1 問以上正解しているので、スコアは 1 となる。

Sample Input 3

4
11 15 58 1

Sample Output 3

3

得点が 3 以上の問題を 3 問以上正解しているので、スコアは 3 となる。