alexjercan/bugnet huggingface dataset:
多角形の面積

１つの円に内接する２つの多角形の頂点情報を入力とし、それらの面積の大小関係を出力するプログラムを作成してください。

X 角形の各頂点には反時計回りに 1 から X まで番号が振ってあるものとします（図は、X = 4 の場合の例を示しています）。ただし、与えられる多角形は円の中心を内部に含むものとし、頂点 i の位置に関するデータは、頂点 i から頂点 i+1 まで反時計回りに計った中心角の角度 v (1 ≤ v < 180 の整数) で与えられます。また、出力する大小関係については、第１の多角形の面積が大きい場合は 1 (半角数字)、第２の多角形の面積が大きい場合は 2 (半角数字)、それぞれの面積が等しい場合は 0 (半角数字) と出力してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

m
v1
v2
:
vm −1
n
v1
v2
:
vn − 1

１行目に第１の多角形の頂点の数 m (3 ≤ m ≤ 50)、続く m − 1 行に第１の多角形の頂点 i の情報 vi (1 ≤ vi < 180) が与えられます。

続く行に第２の多角形の頂点の数 n (3 ≤ n ≤ 50)、続く n − 1 行に第２の多角形の頂点 i の情報 vi (1 ≤ vi < 180) が与えられます。

データセットの数は 200 を超えません。

Output

データセットごとに大小関係（半角数字）を１行に出力します。

Sample Input

4
30
125
75
4
30
125
75
5
30
125
75
65
4
30
125
75
4
30
125
75
6
30
50
50
25
75
0

Output for the Sample Input

0
1
2
バブルソート

データを並べ替えるための整列（ソート）アルゴリズムはコンピュータ科学には欠かせない基本的なアルゴリズムです。例えば、下図のように「整数値の配列の要素を昇順に並べ替える」という操作が整列です。

多くの整列アルゴリズムが考案されてきましたが、その中でも基本的なアルゴリズムの１つがバブルソートです。例として、与えられた整数値の配列をバブルソートで昇順に並べてみます。

バブルソートでは、各計算ステップにおいて、配列を「ソートされた部分」と「ソートされていない部分」に分けて考えます。最初は配列全体がソートされていない部分になります。

ソートされていない部分の先頭から、隣同士の要素を比較して（図では緑色の要素）、大きい値が右にくるようにそれらを交換します。二つの値が等しい場合は交換しません。

この処理をソートされていない部分（図では白色の要素）の末尾まで繰り返します。最後に、末尾をソートされている部分（図では青色の要素）に追加して1ステップが完了します。

このステップをソートされていない部分の長さが1になるまで繰り返します。

このようにソートされていない部分の長さが 1 になったら、ソートの処理を終了します。

それでは、n 個の数値の配列を入力とし、数値が配列の先頭から昇順に並ぶように上記のバブルソートの手順で並べ替えを行い、要した配列要素の交換回数を出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
a1
a2
:
an

１行目に数値の数 n (1 ≤ n ≤ 100)、続く n 行にi 番目の数値 ai (1 ≤ ai ≤ 1000000) が与えられます。

データセットの数は 20 を超えません。

Output

データセットごとにデータ要素の交換回数（整数）を１行に出力します。

Sample Input

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

Output for the Sample Input

7
0
3
観音堂

一郎君の家の裏山には観音堂があります。この観音堂まではふもとから 30 段の階段があり、一郎君は、毎日のように観音堂まで遊びに行きます。一郎君は階段を１足で３段まで上がることができます。遊んでいるうちに階段の上り方の種類（段の飛ばし方の個数）が非常にたくさんあることに気がつきました。

そこで、一日に 10 種類の上り方をし、すべての上り方を試そうと考えました。しかし数学を熟知しているあなたはそんなことでは一郎君の寿命が尽きてしまうことを知っているはずです。

一郎君の計画が実現不可能であることを一郎君に納得させるために、階段の段数 n を入力とし、一日に 10 種類の上り方をするとして、一郎君がすべての上り方を実行するのに要する年数を出力するプログラムを作成してください。一年は 365 日として計算してください。一日でも必要なら一年とします。365 日なら 1 年であり、366 日なら 2 年となります。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットとして、段数を表す１つの整数 n (1 ≤ n ≤ 30) が１行に与えられます。

データセットの数は 30 を超えません。

Output

データセットごとに一郎君がすべての上り方を実行するのに必要な年数（整数）を１行に出力します。

Sample Input

1
10
20
25
0

Output for the Sample Input

1
1
34
701
ブラックジャック

ブラックジャックはカジノで行われるカードゲームの一種で、1 〜 13 までの数が書かれたカードを使ってゲームが行われます。各カードの点数は次のように決まっています。

1 は 1 点あるいは 11 点

2 から 9 までは、書かれている数の通りの点数

10 から 13 までは、10 点

このゲームには親を含めた何人かの参加者がおり、それぞれが何枚かのカードの組を持っています。このカードの組のことを手と呼びます。手の点数はカードの点数の合計です。その計算は次のように行うものとします。

カードの点数の合計が 21 より大きくなるときは、手の点数を 0 点とする

カードの点数として、1 は 1 点と計算しても 11 点と計算してもよいが、手の点数が最大となる方を選ぶこととする

配られたカードの情報を入力とし、手の点数を出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

c1 c2 ... cn

１行に i 番目のカードに書かれている整数 ci (1 ≤ ci ≤ 13) が空白区切りで１行に与えられます。カードの数 n は 100 を超えません。

データセットの数は 200 を超えません。

Output

データセットごとに手の点数を１行に出力します。

Sample Input

1
7 7 7
7 7 8
12 1
10 1 1
0

Output for the Sample Input

11
21
0
21
12
ランチ

お昼に食べるお弁当を作るために、お店で食べ物を買いました。お店では、食べ物を入れるのに細長い袋しかもらえなかったので、すべての食べ物を縦に積んで袋に入れる必要があります。袋が倒れにくいように、できるだけ重い物を下にして詰めたいのですが、食べ物の中にはやわらかい物もあって、上に重い物を乗せるとつぶれてしまいます。

そこで、食べ物の情報を入力とし、全ての食べ物がつぶれず、かつ全体の重心が最も低くなるような積み方を出力するプログラムを作成してください。それぞれの食べ物ごとに、名前 f、重さ w、上に載せて耐えられる重さ s が指定されます。
「全ての食べ物がつぶれない」というのは、下から順に、（f1、f2、... 、fn）と n 個の食べ物を積んだ時、すべての f について、

sfi ≥ wfi+1 + wfi+2 + ... + wfn

であることを意味します。また、全体の重心 G は、

G = (1 × wf1 + 2 × wf2 + ... + n × wfn) / (wf1 + wf2+ ... +wfn)

とします。ただし、解はちょうど1つだけ存在するものとします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。

n
f1 w1 s1
f2 w2 s2
:
fn wn sn

１行目に食べ物の個数 n (1 ≤ n ≤ 10)、続く n 行に i 番目の食べ物の名前 fi (20 文字以内の半角英文字列)、重さ wi (1 ≤ wi ≤ 1000)、耐えられる重さ si (1 ≤ si ≤ 1000) が空白区切りで与えられます。

データセットの数は 20 を超えません。

Output

データセットごとに、次の形式で食べ物の名前を下から積み上げる順に出力します。

1 行目: 1 番下の食べ物の名前（半角英文字列）

2 行目: 下から2 番目の食べ物の名前

：

n 行目: 1 番上の食べ物の名前

Sample Input

4
sandwich 80 120
apple 50 200
cheese 20 40
cake 100 100
9
onigiri 80 300
onigiri 80 300
anpan 70 280
mikan 50 80
kanzume 100 500
chocolate 50 350
cookie 30 80
purin 40 400
cracker 40 160
0

Output for the Sample Input

apple
cake
sandwich
cheese
kanzume
purin
chocolate
onigiri
onigiri
anpan
mikan
cracker
cookie
サイコロパズル

各面にアルファベット一文字(a 〜 z、A 〜 Z)が描かれたサイコロがあります。

このようなサイコロを8つ組み合わせて 2 × 2 × 2 の立方体を作ることを考えます。

組み合わせ方には条件があり、各サイコロの向き合う面は同じアルファベットでかつ一方が小文字、も
う一方が大文字でなければなりません。例えば、a と描かれた面に接することができるのは A と描か
れた面です。ただし、接するときの文字の向きは問いません。

このルールに従い、８つのサイコロの情報を入力とし、立方体を作れるか否かを判定するプログラムを作成してください。立方体を作れる場合は YES（半角英大文字）、作れない場合は NO（半角英大文字）と出力してください。

なお、サイコロの各面の文字を次の図にあるように c1 〜 c6 と表すことにします。

また、1つのサイコロに同じ文字が複数回描かれていることは無いものとします（同じアルファベットの大文字と小文字はその限りではありません）。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

s1
s2
:
s8

i 行目に i 個目のサイコロの情報 si が与えられます。si は長さ 6 の文字列であり j 文字目がサイコロの各面 cj に対応します。

データセットの数は 50 を超えません。

Output

データセットごとに判定結果（半角英大文字）を１行に出力します。

Sample Input

zabZNq
BCxmAi
ZcbBCj
aizXCm
QgmABC
JHzMop
ImoXGz
MZTOhp
zabZnQ
BCxmAi
ZcbBCj
aizXCm
QgmABC
JHzMop
ImoXGz
MZTOhp
abcdef
ABDCFE
FBDCAE
abcdef
BEACDF
bfcaed
fabcde
DEABCF
UnivOf
AizuaH
zTXZYW
piglIt
GRULNP
higGtH
uAzIXZ
FizmKZ
UnivOf
AizuaH
piglIt
higGtH
GRULNP
uAzIXZ
FizmKZ
ZTXzYW
0

Output for the Sample Input

YES
NO
YES
YES
NO
博士の研究室

会津大学の鶴賀博士はとても研究熱心なことで有名です。彼の研究室には複数の学生がいますが、彼は毎日夜遅くまで研究をするので必ず最後に帰宅します。彼の研究室にはドアでつながった複数の部屋があり、最後に研究室を出る人がすべての部屋の明かりを消して帰宅することになっています。

最近、大学では省エネに力を入れているため、すべての明かりが消えているか厳しくチェックされます。困ったことに彼は誰もが認める極度の臆病者で、明かりの消えた部屋には決して入ることができません。そこで、彼はある部屋の照明のON/OFFを他の部屋から操作できるように研究室の照明設備を改造しました。

ところが、予算の都合で１つの部屋からコントロールできる部屋が限られています。その上、帰宅時の各部屋の明かりの状態も日によって異なるため、全ての明かりを消して出口までたどりつくのに毎日かなりの時間が掛かっています。そこで、研究員のあなたが博士を助けるためにプログラムを作成することになりました。

研究室の部屋情報、各部屋の明かりの点灯情報、各部屋の照明スイッチの情報を入力とし、博士がすべての明かりを消して帰宅できるかどうかを出力するプログラムを作成してください。ただし、部屋の数 n は 1 以上 15 以下の整数、ドアの数 m は 1 以上 30 以下の整数、照明の点灯情報 l は 0 または 1 の整数でそれぞれ消灯と点灯を表し、各部屋には 1 以上 n 以下の整数で番号が付与されているものとします。出口は番号 n の部屋に存在し、博士は常に部屋 1 からスタートするものとします。

なお、出力は、博士の取るべき行動に応じて以下の 3 通りに分けて出力します。

ケース１.
出口以外の全ての明かりを消して出口にたどりつける場合（経路の過程で出口を通ってもよい）。

You can go home in X steps.

と出力します。ここで X は部屋の移動、スイッチのON/OFF をそれぞれ１ステップとした場合の、博士の部屋から出口にたどり着くまでの最短のステップ数です。さらに、以下の文字列に従い博士の部屋から出口までの経路（博士のとるべき行動）を X 行で出力します。

部屋 R へ移動する場合

Move to room R.

部屋 R の照明を消す場合

Switch off room R.

部屋 R の照明を点灯する場合

Switch on room R.

ここで、R は部屋の番号を表します。博士がある部屋に移動した直後、複数のスイッチを操作して次の部屋に移動する場合は操作する部屋番号が小さいほうから出力してください。この条件を満たす限り、複数の解がある場合は、どれを出力してもかまいません。この情報をもとに、博士は無事帰宅することができます。

ケース2. 出口にたどり着くことはできるが、出口のある部屋以外の全ての明かりを消すことが
できない場合。

You can not switch off all lights.

と出力する。この場合、博士は省エネを守らなかったとして大学に罰せられます。

ケース3. どうあがいても出口にたどり着けない場合。

Help me!

と出力する。この場合、博士は警備員に緊急救助を求めます。

簡単な例を示します。この例では、研究室は 4 つの部屋で構成され、部屋 1 と 2、2 と 3、2 と 4 がそれぞれ繋がっています。また、部屋 1 及び 4 から部屋 2、3 の照明を操作することができ、部屋 3 から部屋 1、2、4 の照明を操作することができます。最初、部屋 2、3、4 の照明が消えた状態で、博士が部屋 1 にいます。

この状況では、博士が取るべき行動は次のようになります。

部屋2と3の照明をonにする。
部屋2に移動する。
部屋3に移動する。
部屋1の照明をoffにし、部屋4の照明をonにする。
部屋2に移動する。
部屋4に移動する。
部屋2と3の照明をoffにする。

これで博士は部屋 4 以外の照明を消すことができ、帰宅することができます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロ2つの行で示されます。
各データセットは以下の形式で与えられます。

n m
s1 t1
s2 t2
:
sm tm
l1 l2 ... ln
k1 r1 r2 ... rk1
k2 r1 r2 ... rk2
:
kn r1 r2 ... rkn

１行目に部屋の数 n (1 ≤ n ≤ 15) とドアの数 m (1 ≤ m ≤ 30) が空白区切りで与えられます。続く m 行に i 個目のドアの情報が与えられます。si ti は部屋 si と部屋 ti がドアで繋がっていることを表します。

続く１行に、部屋 i の照明の点灯情報 li (0 または 1) が空白区切りで与えられます。

続く n 行に部屋 i のスイッチ情報が与えられます。ki (0 ≤ ki ≤ 12) は部屋 i のスイッチの数、r1 ... rki は照明を操作できる部屋の番号を表します。

データセットの数は100 を超えません。

Output

データセットごとに、上記の 3 通りの結果に応じて以下の形式で出力します。

ケース 1 の場合

1行目: You can go home in X steps.

2行目: 1つ目の博士が取るべき行動

3行目: 2つ目の博士が取るべき行動

:

X+1 行目: X 個目の博士が取るべき行動

ケース 2 の場合

1 行目: You can not switch off all lights.

ケース 3 の場合

1 行目: Help me!

Sample Input

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

Output for the Sample Input

You can go home in 10 steps.
Switch on room 2.
Switch on room 3.
Move to room 2.
Move to room 3.
Switch off room 1.
Switch on room 4.
Move to room 2.
Move to room 4.
Switch off room 2.
Switch off room 3.
You can not switch off all lights.
Help me!
お化け屋敷

会津学園高等学校では、毎年学園祭をおこなっています。その中でも一番人気はお化け屋敷です。一番人気の理由は、お化け屋敷をおこなうクラスが 1クラスや 2クラスではなく、9クラスがお化け屋敷をおこなうことです。それぞれが工夫することより、それぞれが個性的なお化け屋敷になっています。そのため、最近では近隣から多くの来場者が訪れます。

そこで、学園祭実行委員会では、お化け屋敷の入場料金を下表のように校内で統一し、これにもとづき各クラスごとに入場者総数と収入の集計をおこなうことにしました。

入場料金表(入場者 1人あたりの入場料)

午前 午後
200円 300円

各クラス毎の午前と午後の入場者数を入力とし、各クラス毎の入場者総数及び収入の一覧表を作成するプログラムを作成してください。

Input

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

name1 a1 b1
name2 a2 b2
:
name9 a9 b9

入力は９行からなり、i 行目に第 i のクラスのクラス名 namei (数字とアルファベットを含む 1 文字以上 15 文字以下の半角文字列)、午前の入場者数 ai (0 ≤ ai ≤ 400)、 午後の入場者数 bi (0 ≤ bi ≤ 400) が与えられます。

Output

i 行目に第 i のクラスのクラス名、 入場者総数、 料金収入を空白区切りで１行に出力してください。

Sample Input

1a 132 243
1c 324 183
1f 93 199
2b 372 163
2c 229 293
2e 391 206
3a 118 168
3b 263 293
3d 281 102

Output for the Sample Input

1a 375 99300
1c 507 119700
1f 292 78300
2b 535 123300
2c 522 133700
2e 597 140000
3a 286 74000
3b 556 140500
3d 383 86800
バドミントン

A君、Bさん、C君で久しぶりに遊ぶことになりました。 A君とBさんがプレイヤー、C君が審判になりバドミントンのシングルスのゲームをしました。3人で決めたルールは以下の通りです。

3 ゲームを行います。

11 点を先取した人が、そのゲームの勝者となります。

第 1 ゲームの最初のサーブはA君から始まりますが、次のサーブは直前のポイントを取った人が行います。

第 2 ゲーム、第 3 ゲームは前のゲームを取った人が最初のサーブを行います。

10 - 10 になって以降は 2 点差をつけた人が勝者となります。

全てのゲームが終わり、得点を見ようとしたのですが、審判のC君が得点を記録するのを忘れていました。しかし、サーブを打った人をきちんと記録していました。サーブ順の記録から得点を計算するプログラムを作成してください。ただし、二人が打ったサーブの回数の合計は 100 以下とし、サーブ順の記録は、サーブを打った人を表す "A" または "B" の文字列で表されます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されま
す。各データセットは以下の形式で与えられます。

record1
record2
record3

i 行目に第 i ゲームのサーブ順を表す文字列が与えられます。

データセットの数は 20 を超えません。

Output

データセット毎に、i 行目に第 i ゲームのA君の得点とBさんの得点を空白区切りで出力してください。

Sample Input

ABAABBBAABABAAABBAA
AABBBABBABBAAABABABAAB
BABAABAABABABBAAAB
AABABAAABBAABBBABAA
AAAAAAAAAAA
ABBBBBBBBBB
0

Output for the Sample Input

11 8
10 12
11 7
11 8
11 0
0 11
４進数

10 進数は現在使われている一般的な記数法で、0、1、2、3、4、5、6、7、8、9 の10 個の記号を用いて全ての数字を表します。

2 進数はコンピュータの世界でよく使われる記数法で、0 と1 の二つの記号を用いて全ての数字を表します。

4 進数で用いられるのは 0、1、2、3 の 4 つの数字だけです。4 進数では 0 から順に数を増やしていったときに 4 まで来たら次の位に桁上がりします。そのため、10 進数の 4 は桁上がりして「10」という表現になります。

10 進数
0
1
2
3
4
5
6
7
8
9
10
...

2 進数
0
1
10
11
100
101
110
111
1000
101
1010
...

4 進数
0
1
2
3
10
11
12
13
20
21
22
...

昔ハワイでは魚やタロイモを指にはさんで数えていたので、10 進数ではなく4 進数を使っていたそうです。

10 進数で入力される整数 n を 4 進数に変換し出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりは -1 ひとつの行で示されます。各データセットとして１つの整数 n (0 ≤ n ≤ 1000000) が１行に与えられます。

データセットの数は 2000 を超えません。

Output

入力データセット毎に 4 進数に変換した結果を１行に出力します。

Sample Input

7
4
0
12
10
10000
-1

Output for the Sample Input

13
10
0
30
22
2130100
何色？

ウェブデザイナーを目指す太郎君はただいま修行中。事務所の先輩から「このページの背景色は#ffe085で」と、ウェブデザイン特有の色番号で指示されるのですが、それがどんな色かパッと思い浮かべることができません。

この色番号は光の三原色である赤、緑、青それぞれの強さを表わしています。具体的には2 桁の 16 進数を3 つ組み合わせたもので、色番号を“#RGB”とするとき、R は赤の強さ、G は緑の強さ、は青の強さを表します。それぞれ 00 から ff までの値になります。

色番号にまだ不慣れな太郎君のために、色番号を入力とし、色の表の中からもっとも近い色の名前
を出力するプログラムを作成してください。使用する色の表は以下の通りです。

色の名前	赤の強さ	緑の強さ	青の強さ

black	00	00	00

blue	00	00	ff

lime	00	ff	00

aqua	00	ff	ff

red	ff	00	00

fuchsia	ff	00	ff

yellow	ff	ff	00

white	ff	ff	ff

「もっとも近い色」とは、以下のように定義します。与えられた色番号での赤、緑、青の強さをそれぞれ R、G、B とし、表の k 番目の色の赤、緑、青の強さをそれぞれ Rk、Gk、Bk とするとき、次の式で計算する dk の値が最も小さい色がもっとも近い色とします。

なお、dk の値が同じになる色が複数存在する場合は表の中でより上にある色がもっとも近い色になり
ます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットとして、色番号を表す文字列が、#RGB 形式で１行に与えられます。

データセットの数は 1000 を超えません。

Output

データセット毎に最も近い色の名前を１行に出力します。

Sample Input

#ffe085
#787878
#decade
#ff55ff
0

Output for the Sample Input

white
black
white
fuchsia
２都市間の距離

地球上の2 都市の北緯と東経を入力とし、地表距離を計算して出力するプログラムを作成してください。ただし、地球は半径 6,378.1 km の球とし、2 点間の地表距離とはこの球面に沿った最短距離です。また、南半球でも南緯は用いずに北緯 0 ~ -90 度を用い、グリニッジ子午線の西でも西経は用いずに東経 180 ~ 360 度を用いることとします。地表距離は km 単位で求め、小数点以下は四捨五入し、整数値として出力してください。

以下に主要都市の北緯、東経の例を示します。

地名	北緯(度)	東経(度)

東京	35.68	139.77

シンガポール	1.37	103.92

シドニー	-33.95	151.18

シカゴ	41.78	272.25

ブエノスアイレス	-34.58	301.52

ロンドン	51.15	359.82

Input

複数のデータセットの並びが入力として与えられます。入力の終わりは-1 四つの行で示されます。各データセットは以下の形式で与えられます。

a b c d

1 行に第 1 の都市の北緯 a、第 1 の都市の東経 b、第 2 の都市の北緯 c、第 2 の都市の東経 d が空白区切りで与えられます。入力はすべて実数で与えられます。

データセットの数は 30 を超えません。

Output

データセット毎に 2 都市の地表距離を１行に出力します。

Sample Input

35.68 139.77 51.15 359.82
1.37 103.92 41.78 272.25
51.15 359.82 -34.58 301.52
-1 -1 -1 -1

Output for the Sample Input

9609
15092
11112
テトリス

テトリスは、落ちてくるブロックを盤面上に並べて消すゲームです。ここでは、それを少しアレンジしたゲームを考えましょう。

このゲームの盤面の大きさは横 5 コマで、出現するブロックがすべて入るだけの高さがあります。落ちてくるブロックは直線状で、横向き、縦向きの 2 種類があり、長さは 1 から 5 までの 5 種類です。

以下に例を示します。Step(イ) からStep(ホ)までの図はブロックが落ちて消えていく様子を表したものです。
Step(イ)から順にStep(ロ)、Step(ハ)と順に進んでいきます。

ブロックを落とすときに、Step(イ)のようにブロックのどこかが下に積んであるブロックに引っかかったときには、Step(ロ)のように落ちたブロックはその場所で止まります。また、ブロックを落とした結果、盤面の横一行の全てのコマにブロックが詰まった場合には、Step(ニ)で示されるように、その行のブロックが消えます。この後、消えた行の上にあるブロックが、そのままの形で1行下にしずみます(Step(ホ))。

1 ゲームは 1000 個以内のブロックが順に落ちてくることとします。例えば、落ちるブロックの長さが順番に横向き 4 コマ, 横向き 3 コマ, 縦向き 2 コマ, 縦向き 3 コマで、落ちる場所が左端から 1 コマ目、1 コマ目、4 コマ目、5 コマ目であった場合には、下図のStep(イ)~(ト)のように落ち、最後に残るブロックは 2 コマになります。

順番に落ちてくるブロックの情報を入力とし、全てのブロックが落ちた時に残るコマ数を出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。

n
d1 p1 q1
d2 p2 q2
:
dn pn qn

１行目にブロックの数 n (1 ≤ n ≤ 1000) が与えられます。続く n 行に i 個目のブロックの向き di (1 または2)、ブロックの長さ pi (1 ≤ pi ≤ 5)、ブロックの位置 qi が与えられます。ブロックの向き di は 1 が横向きを、2 が縦向きを表します。ブロックの位置 qi は盤面上の左端から1 ~ 5 までの整数とし、横向きのブロックの場合は左端のコマの落ちる位置とします。

データセットの数は 20 を超えません。

Output

データセット毎に最後に残るブロックの占めるコマ数を１行に出力します。

Sample Input

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

Output for the Sample Input

2
0
6
ふしぎな虫

会津生物学研究所のA博士は、とある南の島でふしぎな虫を発見しました。形は芋虫のように細長いのですが、ひとつの体節が玉のような形をしているので、糸でつないだビーズ玉のように見えます。ふしぎなのは体の色に様々なバリエーションがあることと、なかには時間がたつにつれて体の色が変っていく虫がいることでした。どの虫の体節の色も赤か緑か青のどれかに限られるようですが、1 秒ごとに体節の色が変わっていき、最後にはすべての体節が同じ色になって落ち着く場合もあれば、いつまで待ってもずっと色が変わりつづける場合もあるようでした。

調べていくうちに、ふだんはすべての体節が同じ色をしているのですが、何かに驚いたりして興奮した後は体節の色が勝手に変わってしまうことがわかりました。一度体節の色が変わってしまうと、ふたたびすべての体節が同じ色になるまではずっと色が変わり続けることがわかりました。

A博士はこの虫を何匹も捕まえて興奮させてみては、色が変わる様子を興味深く観察していましたが、やがて色が変化している最中の色の変わり方には次のような規則性があることに気がつきました。

色が変わるのは、隣り合っている色違いの 2つの体節のペア 1組だけが変わり、他の体節の色は変わらない。ただし、そのようなペアが複数あるときに、どのペアの色が変わるかはあらかじめ予測できない。

そのようなペアは、2つの体節の色のどちらでもない色に同時に変わる(たとえば、緑と赤の体節が隣り合っているときは、それらが同時に青に変わる)。

虫の色の変化を、2秒後まですべて書いたものが上の図です。図の上段のような色をした虫がいるとします。このとき、隣り合った色違いの体節のペアは 3組あるので、1秒後には中段に並べて描いた 3通りの色のどれかに変わります。1秒後に中段左側の 2つのように変わったときには、2秒後にすべての体節が緑色になることができます(図の下段の左側から 2番目)。 それに対して、1秒後に中段の1番右のように変わったときには、2秒後にすべての体節が同じ色に変わることはありません。

博士は、目の前にいる虫の体節がすべて同じ色になる可能性があるのか、あるとしたらそうなるのは最短で何秒後なのかを予測することにしました。

目の前にいる虫の体節の色の並びを入力とし、その虫の体節がすべて同じ色になるのに要する最短の時間を秒単位で出力するプログラムを作成してください。ただし、同じ色になる可能性がないときは「NA(半角英大文字)」と出力してください。また、虫の体節の色の並びは2 以上 10 以下のr(赤)、g(緑)、b(青)からなる文字列で表されます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されま
す。各データセットとして、 虫の体節の情報を表す１つの文字列が１行に与えられます。

データセットの数は 100 を超えません。

Output

データセット毎に、すべての体節の色が同じになるまでに要する最小時間 (秒単位の整数) または NA を１行に出力します。

Sample Input

rbgrg
rbbgbbr
bgr
bgrbrgbr
bggrgbgrr
gbrggrbggr
rrrrr
bgbr
0

Output for the Sample Input

5
7
1
6
NA
8
0
4
橋の取り壊し

水の国ウォーターデブンには n 個の都市があります。各都市は水に囲まれており、島国のようになっています。ウォーターデブンには m 本の橋があり、都市間の交通はそれらの橋によって行われ、全ての都市に行き来することができます。

最近、道路特定財源の見直しにより橋の維持費の削減が決定されました。全部の橋を維持することができなくなってしまい、いくつかの橋を取り壊すことになりました。そこで、ウォーターデブンはどの都市にでも行くことができるように橋を残しつつ、橋の維持費を最小化することが課題となりました。

都市の数、橋の数、各橋の維持費を入力とし、橋を利用してどの都市にも行けるようにしつつ、橋を取り壊した場合の維持費の最小値を出力するプログラムを作成してください。なお、橋の取り壊しには費用が掛からないものとします。ただし、各都市は 0 から n - 1 まで順番に番号が付けられているものとします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。各データセットは以下の形式で与えられます。

n m
a1 b1 cost1
a2 b2 cost2
:
am bm costm

１行目に都市の数 n (2 ≤ n ≤ 100)、 橋の数 m (1 ≤ m ≤ 500) が与えられます。続く m 行に第 i の橋の情報が与えられます。ai, bi は橋がつないでいる都市の番号、costi (1 ≤ costi ≤ 1000) は橋にかかる維持費を表します。

Output

データセット毎に橋の維持費の合計を１行に出力します。

Sample Input

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

Output for the Sample Input

10
6
本棚

太郎君はとある小説にはまっています。その小説は全部で n 巻あり、各巻で本の厚さが異なります。太郎君はこの小説が大変気に入ったので、その小説専用の本棚を買おうと思っています。しかし、部屋に大きな本棚を置くとかなり狭くなってしまうので、出来るだけ本棚の幅が小さくなるように工夫しなければなりません。床から天井の高さを測ったところ、どうやら m 段の本棚なら置けることが分かりました。そこで、小説 n 巻をどのように分ければ m 段の本棚の幅を最小に出来るでしょうか?
太郎君にはこだわりがあり、各段に納める小説は巻の番号順に並んでいなければなりません。

本棚の段数、小説の巻数、各本の厚さを入力として、全巻を 1巻から順に収めることができる本棚の中で幅が最小となるものの幅を求めるプログラムを作成してください。ただし、本棚の枠の大きさは幅に含めないこととします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。各データセットは以下の形式で与えられます。

m n
w1
w2
:
wn

１行目に部屋に置くことができる本棚の段数 m (1 ≤ m ≤ 20)、 小説の巻数 n (1 ≤ n ≤ 100) が与えられます。続く n 行に第 i 巻の本の厚さを表す整数 wi (1 ≤ wi ≤ 1000000) が与えられます。

ただし、本棚の幅は 1500000 を超えないものとします。

データセットの数は 50 を超えません。

Output

データセット毎に最小となる本棚の幅を１行に出力します。

Sample Input

3 9
500
300
800
200
100
600
900
700
400
4 3
1000
1000
1000
0 0

Output for the Sample Input

1800
1000
ビーカー

いろいろな容量のビーカーが与えられています。はじめに、その中の一番容量の大きなビーカーを一個選び、蛇口から水をいっぱいになるまで注ぎます。つぎに、次のルールにしたがいながら、ビーカーの水を他のビーカーに移し替えていきます。

ビーカーに入っている水は,残さずにすべて他のビーカーに移さなければならない。ただし、一個のビーカーに水を全部移せないときは、複数のビーカーに分けて移してもよい。

ビーカーに水を入れるとき、いっぱいになるまで水を注がなければならない。また、水をこぼしてはならない。

複数のビーカーから同じビーカーに一度に水を注いではならない。

同じビーカーには一度しか水を注いではならない。

このルールにしたがったとき、ビーカーの個数 n と各ビーカーの容量を入力とし、すべてのビーカーに水を注ぐことができるかどうかを判定して出力するプログラムを作成してください。すべてのビーカーに水を注ぐことができるときは YES (半角英大文字)、できないときは NO (半角英大文字) を出力してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。

n
c1 c2 ... cn

1 行目にビーカーの個数 n (1 ≤ n ≤ 50) が与えられます。２行目に i 番目のビーカーの容量を表す整数 ci (1 ≤ ci ≤ 100) が与えられます。

データセットの数は 105 を超えません。

Output

データセット毎に判定結果を１行に出力します。

Sample Input

10
11 2 23 4 2 12 8 5 2 10
8
2 1 3 11 2 3 1 4
9
5 9 1 2 4 8 17 1 8
8
3 38 9 4 18 14 19 5
1
1
0

Output for the Sample Input

YES
YES
YES
NO
YES
三目並べ

3 × 3 の盤面の三目並べを考えましょう。三目並べは 2 人で行う対戦ゲームです。先攻後攻を決め、一人は黒石、一人は白石を打ちます。盤面に石を交互に一つずつ置いていき、縦横斜めのいずれかの方向に先に 3 つ自分の石を並べた人が勝ちとなります。

盤面の情報を入力とし、勝敗の判定を行い、黒が勝ちの場合は「b」、白が勝ちの場合は「w」、どちらもそろっていない場合は「NA」と出力するプログラムを作成してください。 盤面の情報は、3行3列の文字列で構成されます。「b」は黒石、「w」は白石、「+」(半角プラ
ス)は何も置かれていない状況を表します。ただし、同時に黒が3つ、白が3つ並ぶことはありませ
ん。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

board1
board2
board3

i 行目に盤面の i 行目の情報を表す文字列 boardi が与えられます。

データセットの数は 50 を超えません。

Output

データセット毎に、「b」、「w」、「NA」のいずれかを１行に出力します。

Sample Input

bbw
wbw
+b+
bwb
wbw
wbw
0

Output for the Sample Input

b
NA
鶴ヶ城

会津若松市のシンボルである鶴ヶ城は、蒲生氏郷が本格的な天守閣を築城し、「鶴ヶ城」と名付けました。天守閣からは会津盆地が一望できます。また、晴れた日には、白虎隊で有名な飯盛山の山頂から鶴ヶ城を見ることができます。

会津若松市の今後の広報活動の参考にするため、鶴ヶ城に訪れた来場者について、年代調査をすることにしました。来場者の年齢を入力とし、下記の年齢区分別に人数を出力するプログラムを作成してください。

区分	年齢

10歳未満	0 ~ 9

10代	10 ~ 19

20代	20 ~ 29

30代	30 ~ 39

40代	40 ~ 49

50代	50 ~ 59

60歳以上	60 ~

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
a1
a2
:
an

1 行目に来場者の人数 n (1 ≤ n ≤ 1000000)、続く n 行に i 人目の来場者の年齢 ai ( 0 ≤ ai ≤ 120 ) が与えられます。

Output

データセット毎に以下の形式で人数を出力します。

1 行目: 10 歳未満の人数

2 行目: 10 代の人数

3 行目: 20 代の人数

4 行目: 30 代の人数

5 行目: 40 代の人数

6 行目: 50 代の人数

7 行目: 60 歳以上の人数

Sample Input

8
71
34
65
11
41
39
6
5
4
67
81
78
65
0

Output for the Sample Input

2
1
0
2
1
0
2
0
0
0
0
0
0
4
ゴールドバッハ予想

ゴールドバッハ予想とは「6 以上のどんな偶数も、2 つの素数 (*1) の和として表わすことができる」というものです。

たとえば、偶数の 12 は 12 = 5 + 7 、18 は 18 = 5 + 13 = 7 + 11 などと表すことができます。

和が 134 となる 2 つの素数の組み合せをすべて書き出すと、以下の通りとなります。

134 = 3+131 = 7+127 = 31+103 = 37+97 = 61+73 = 67+67

= 131+3 = 127+7 = 103+31 = 97+37 = 73+61

与えられた数が大きくなると、いくらでも素数の組み合せが見つかるような気がします。しかし、現代数学をもってしてもこの予想を証明することも、反例を作ることもできません(*2)。ちょっと不思議な感じがしますね。

そこで、ゴールドバッハ予想を鑑賞するために、偶数 n を入力とし、和が n となる 2 つの素数の組み合せの数を求めるプログラムを作成してください。

和が n となる素数の組み合せの数とは n = p + q かつ p ≤ q であるような正の素数 p, q の組み合せの数です。上の例からわかるように和が 134 となる素数の組み合せは6 個です。

(*1) 素数とは、1 または自分自身以外に約数を持たない整数のことである。なお、1 は素数ではない。

(*2) 2007 年 2 月現在、5×1017 までの全ての偶数について成り立つことが確かめられている。(Wikipedia)

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。 各データセットとして、１つの偶数 n (6 ≤ n ≤ 1000000) が１行に与えられます。

データセットの数は 500 を超えません。

Output

データセット毎に素数の組み合せの数を１行に出力します。

Sample Input

134
4330
34808
98792
0

Output for the Sample Input

6
72
274
607
会津地鶏

2008 年 4 月に、会津若松市は長さ20 m 85 cm のやきとり作りに挑戦して成功しました。このとき使われた鶏肉が、会津特産の会津地鶏です。会津地鶏はとてもおいしいのですが、飼育がむずかしいので生産量が少なく、値段が高いのが難点です。

今日は一郎君の家に、遠くから親戚が遊びに来ます。お母さんは鶏肉の水炊きを作って親戚をもてなすことにしました。近くのお肉屋さんでは会津地鶏とふつうの鶏肉の 2 種類の鶏肉を売っています。お母さんは、以下のような指示を一郎君に与えて、お肉屋さんに行って鶏肉を買ってくるように
頼みました。

鶏肉が足りなくなると困るので、決められた量以上の鶏肉を買う。

予算の許す範囲で会津地鶏をできるだけ多く買う(会津地鶏は必ず買うこと)。

会津地鶏を買った残りでふつうの鶏肉をできるだけ多く買う(予算が足りなければ買わない)。

一郎君がお肉屋さんに行くと、会津地鶏が品薄のため一人が買える量を制限していました。一郎君が、お母さんから与えられたすべての指示を守って買い物をするとき、一郎君が買う会津地鶏と普通の鶏肉の量はそれぞれ何グラムになるでしょう?

買うべき鶏肉の量の下限 q1、予算 b、このお肉屋さんでの会津地鶏 100 グラムの値段 c1、ふつうの鶏肉 100 グラムの値段 c2、会津地鶏を一人が買える量の上限 q2 を入力とし、一郎君が買う会津地鶏とふつうの鶏肉の量を 100 グラム単位で出力するプログラムを作成してください。ただし、このお肉屋さんではお母さんの指示通りに買えない場合には、「NA」と出力してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。 各データセットは以下の形式で与えられます。

q1 b c1 c2 q2

鶏肉の量を表すデータ q1 と q2 は100 グラム単位で指定されます。また、b、c1、c2、q1、q2 は 1 以上 1,000,000 以下の整数とします。

データセットの数は 50 を超えません。

Output

データセット毎に、一郎君が購入する会津地鶏の量とふつうの鶏肉の量(半角空白区切り) または「NA」を１行に出力します。

Sample Input

48 9297 240 126 32
20 3010 157 141 7
30 117002 5680 962 15
8 1673 1712 190 22
64 8478 87 54 307
23 5477 117 92 12
50 7558 1396 187 17
279 88677 4522 514 14
0

Output for the Sample Input

28 20
7 13
15 33
NA
97 0
12 44
NA
NA
投石おみくじ

「自分の道は自分で切り開く」をモットーに、ある神社が自分自身の手で運勢を決めるおみくじを作りました。そのおみくじを引く人にはまず6つの石を投げてもらい、その投げた石の一つ目と二つ目を結ぶ 線分、三つ目と四つ目を結ぶ 線分、五つ目と六つ目を結ぶ 線分の3本の線分の交点を頂点とする 三角形の面積から運勢を決めるというものです。各運勢と三角形の面積との関係は以下のとおりです。

線分の交点を頂点とする三角形の面積	運勢

1,900,000以上	大吉 (dai-kichi)

1,000,000以上1,900,000未満	中吉 (chu-kichi)

100,000以上1,000,000未満	吉 (kichi)

0より大きく 100,000未満	小吉 (syo-kichi)

三角形なし	凶 (kyo)

しかし、三角形の面積の大きさの判定は神主さんが手計算でやっているので正確とはいえず、時間もかかってしまいます。そこで近所に住む優秀なプログラマであるあなたは、一刻でも早くプログラムを書いて神主さんを助けてあげることにしました。

3 本の線分の情報を入力とし、線分の交点を頂点とする 三角形の面積から運勢を出力するプログラムを作成してください。線分の情報は始点の座標 (x1, y1) と、終点の座標 (x2, y2) が与えられ、始点と終点の座標は必ず異なることとします。また、2 つ以上の線分が同一直線上にある場合、交点を持たない 2 つの線分がある場合、3 つの線分が 1 点で交わる場合は、「三角形なし」となります。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロ4つの行で示されます。
各データセットは以下の形式で与えられます。

line1
line2
line3

i 行目に i 番目の線分の情報が与えられます。各線分の情報は以下の形式で与えられます。

x1 y1 x2 y2

線分の端点の座標を表す整数 (x1, y1), (x2, y2) (-1000 ≤ x1, y1, x2, y2 ≤ 1000 ) が空白区切りで与えられます。

Output

データセット毎に、おみくじの結果を１行に出力します。

Sample Input

-3 -2 9 6
3 -2 7 6
-1 0 5 0
2 2 -1 -1
0 1 2 1
-3 -1 3 1
0 0 0 0

Output for the Sample Input

syo-kichi
kyo
探索

「探索」とは、たくさんの情報の中から望みの情報を得る操作のことです。身近な例では、合格発表の時の「たくさんの受験番号から自分の受験番号を見つける」ことや、電話帳から「会津太郎さんの電話番号を見つける」ときなどがあります。この探索という操作はコンピュータの分野でも広く用いられています。

探索の方法は沢山あります。探索の対象となるデータが、小さい順(または大きい順)に並べられている場合に使うことができる探索の方法を考えます。

小さい順(または大きい順)に並べられているデータ列の中央に位置する値と目的の値との大小関係を用いて、中央に位置する値から前半部分を探索範囲にするか後半部分を探索範囲にするかを決めることで、探索の範囲を絞っていく方法があります。手順は以下のようになります。

データの列の全体を探索の範囲とします。

探索の範囲の中央に位置する値を調べます。

目的の値と中央に位置する値が一致すれば探索を終了します。

目的の値と中央に位置する値よりも小さければ前半部分を探索の範囲とし、大きければ後半部分を探索の範囲として2.へ戻ります。

以下は上述した探索の方法の例です。この例での目的の値は51です。それぞれのデータには番号
(index)が振られており、この番号は0から始まっています。

ステップ1: 最初は番号0~6全体を探索の範囲とします。

ステップ2: 探索の範囲の中央に位置する値を調べます。ただし、「中央に位置する値」とは、(左側の番号+右側の番号)を2で割った番号の位置にある値とします。つまり、この場合、(0 + 6) ÷ 2 を計算し、番号3にある値(36)が中央に位置する値となります。

ステップ3:目的の値(51)と中央に位置する値(36)を比較します。

ステップ4:ステップ3の結果から、目的の値は中央に位置する値より大きいので、後半部分にあたる番号4 (中央に位置する値の隣)以降を探索の範囲とします。同様の手順で探索の範囲の中央に位置する値を調べ、目的の値が中央に位置する値より小さければ前半部分を探索の範囲とし、大きければ後半部分を探索の範囲として、探索の範囲を小さくしていきます。(ステップ2~ステップ4の繰り返し)目的の値が中央に位置する値と一致するか、探索の範囲がつきてしまった時に探索を終了します。

n 個の数値の配列を入力とし、目的の値と中央に位置する値を比較した回数を出力するプログラムを作成してください。ただし、中央に位置する値の番号を計算したとき、割り切れない場合は、小数点以下を切り捨てた値をその番号とすることとします。
与えられるデータ列は小さい順に整列されているものとします。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。 各データセットは以下の形式で与えられます。

n
a1
a2
:
an
k

1 行目に数値の数 n (1 ≤ n ≤ 100) 、続く n 行に i 個目の数値 ai (1 ≤ ai ≤ 100000, 整数) が与えられます。

続く行に探索する値 k (1 ≤ k ≤ 100000) が与えられます。

Output

データセット毎に探索が終わるまでの比較回数を１行に出力します。

Sample Input

7
11
15
23
36
51
61
86
51
4
1
2
3
5
4
0

Output for the Sample Input

3
3