alexjercan/bugnet huggingface dataset:
大当たり!

あいづ学園大学附属高校の大阿足あたる君は、スロットマシーンで遊ぶことにしました。

このマシーンは、メダルを投入すると、3 つのリールが回転を始め、各リールが自動的に止まります。通常の1ゲーム(通常ゲーム)は 3 枚のメダルを投入し、図柄が揃うと、その図柄に応じて次のとおりメダルが得られます。

図柄の揃い方によっては特別なサービスが開始されます。 7 の図柄が 3 つ揃うとビッグボーナスが始まり、ボーナスゲームを 5 ゲーム行うことができます。また、BAR の図柄が 3 つ揃うとレギュラーボーナスが始まり、ボーナスゲームを 3 ゲーム行うことができます。

スターの図柄が 3 つ揃うと無料ゲームが開始され、メダルを得ることはできませんが、次のゲームをメダルの投入なく始めることができます。

ボーナスゲーム中は 1 ゲームあたり 2 枚のメダルを投入すると、自動でブドウの図柄が 3 つ揃い、メダルを 15 枚得ることができます。

大阿足君は 100 枚のメダルを持ってマシーンで遊び始めました。しばらく遊び、通常ゲームになった状態で終了しました。手元に残ったメダルは何枚となったでしょうか。

プレイ情報を入力とし、手元に残ったメダルの数を出力するプログラムを作成して下さい。 プレイ情報として、ビッグボーナスの回数 b、レギュラーボーナスの回数 r、通常ゲーム中にブドウが揃った回数 g、チェリーが揃った回数 c、スターが揃った回数 s、総ゲーム数 t が与えられます。

なお、t にはボーナスゲームの回数を含みます。また、メダルはゲームの途中になくなることはありません。

Input

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

b r g c s t

b, r, g, c, s はそれぞれ 0 以上 200 以下の整数、t は 1000 以下の整数です。

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

Output

入力データセットごとに、手元に残ったメダルの枚数を１行に出力します。

Sample Input

3 2 30 3 26 226
9 0 18 3 20 118
5 5 12 2 15 203
7 4 19 2 22 197
7 4 24 4 17 209
0 0 0 0 0 0

Output for the Sample Input

127
793
414
629
617
忍者のビル登り

忍者のあつしさんは、毎日朝早くから夜遅くまで忍者ビルの屋上から町を警備しています。この忍者ビルは、隣接する 2 つの同じ階数のビルであり、あつしさんは警備のために、ビルとビルの間をジャンプしながら屋上へ向かうことを日課としています。

この 2 つのビルは頻繁に清掃が行われるため、ビル登りの助けとなるはしごや障害となる滑りやすい部分があります。 しかも、はしごや滑りやすい部分の位置は毎日変わります。 そのためあつしさんは、屋上へ向かう方法を毎日考えなければいけません。

あつしさんは二つ並んだ同じ階数のビルの壁を跳び移りながら、ビルの屋上を目指します。ジャンプ
はどちらか一方のビルの1階から始められます。向かい側のビルへジャンプするときには、同じ階・1つ上の階・2 つ上の階の、いずれかに飛び移ることができます。

壁には以下の 3 種類があり、それぞれの壁にジャンプした後の移動が決まっています。

0. 普通の壁: 上下の移動はしない。次のジャンプはそこから行う。

1. はしご: はしごは 2 つ以上の階にまたがってかかっており、今いるはしごの一番上まで移動する。次のジャンプはそこから行う。

2. すべる壁: 普通の壁かはしごの一番上まで滑り落ちる。次のジャンプはそこから行う。

また、壁は 1 階から屋上のすぐ下の最上階まであり、屋上へはそのビルの最上階からのみ行くことが
できます。また、ビルの最下階の壁はすべる壁にはなりません。

2 つのビルの階数 n と 2 つのビルの壁の種類を入力とし、最少で何回目のジャンプで最上階までたどり着き、屋上まで行くことができるかを出力するプログラムを作成してください。なお、どちらのビルの屋上にたどり着いてもよいものとします。ただし、あつしさんがどちらのビルの屋上へもたどり着けない場合は“NA”と出力してください。

Input

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

n
a1 a2 ... an
b1 b2 ... bn

１行目にビルの階数 n (3 ≤ n ≤ 100) が与えられます。２行目に１ つ目のビルの 1 階から n 階までの壁の情報 ai、３行目に２つ目のビルの 1 階から n 階までの壁の情報 bi が与えられます。ai, bi はi 階目の壁の情報を表し、0 が普通の壁、1 がはしご(i 階と i+1 階にまたがる)、2 がすべる壁を表します。

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

Output

入力データセットごとに、ジャンプの回数を１行に出力します。

Sample Input

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

Output for the Sample Input

4
NA
危ない橋

会津若松市よりずっと北に位置する会津古松村では、「ヤ橋(やばし) 」と呼ばれる橋が周辺の村へ移動する唯一の手段となっています。その橋は通行人が多いにも関わらず、今にも壊れそうなほど老朽化が進んでしまっています。

ヤ橋は 150 [kg] まで耐えられる強度を持っています。例えば、80 [kg] の人と 50 [kg] の人が同時に渡ることはできますが、80 [kg] の人が渡っているときに 90 [kg] の人が渡り始めると、ヤ橋は壊れてしまいます。

もしヤ橋が壊れてしまったら、会津古松村の人々は周辺の村へ移動する手段を失ってしまいます。そこで、村で唯一のプログラマーであるあなたは、村民の生活を守るために、橋の渡り方から橋が壊れるか否かを判定するプログラムを作成することにしました。

橋を渡る通行人の人数 n (1 ≤ n ≤ 100)、各通行人の体重 mi (1 ≤ mi ≤ 100)、橋を渡り始める時刻 ai、渡り終える時刻 bi (0 ≤ ai, bi < 231) を入力とし、橋が壊れない場合は“OK ”と出力し、壊れる場合は“NG ”と出力するプログラムを作成してください。なお、橋の上にいる通行人の体重の総和が 150 [kg] を超えてしまうとヤ橋は壊れてしまいます。また、ai の時点で通行人は橋の上にいますが、bi の時点では橋の上にいません。

Input

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

n
m1 a1 b1
m2 a2 b2
:
mn an bn

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

Output

入力データセットごとに、橋が壊れるか否かを1行に出力します。

Sample Input

3
80 0 30
50 5 25
90 27 50
3
80 0 30
70 5 25
71 30 50
0

Output for the Sample Input

NG
OK
人生ゲーム

太郎君は、おもちゃ屋さんに会津ホビー社製の人生ゲームを買いに行きました。人生ゲームは、マス目の書かれたボードとルーレットを使って遊びます。ボードには図のようにスタート地点とゴール地点が一つずつあり、それらはひとつながりのマス目でつながっています。最初に、コマはスタート地点のマスに置かれ、ルーレットを回して出た数によってコマを進めます。マスによっては、そこに止まったり通過したりすることでお金を得たり、コマの位置を変えたりするイベントマスがあります。最終的な勝敗は、コマがゴール地点に到達した時点の所持金の多寡で決まります。

この会社の人生ゲームの面白いところは、ルーレットの出る目の大きさ、ゴールまでのマスの数、イベントマスの配置がひとつひとつパッケージごとに異なるところです。それらはケースに書かれており、それを読むことで確認することができます。お金を最も得られる人生ゲームを選びたい太郎君は、得るお金の期待値が一番大きいものを買いたがっています。そこであなたは、太郎君のゲーム選びを手伝うことにしました。

ルーレットは、円周を X 等分に区分され、それぞれに V1、V2、...、VX という値が記入されているとします。ボードには、0 番、1 番、...、Y 番と番号がふられたマス目があり、順番につながっています。マス目の中には、イベントマスと呼ばれる特別なマスが Z 個あり、そこに到達すると特別な動作を行います。イベントマスのマス目の番号は Ni で与えられます。イベントマスには 1 ~ 3 の種類 (Ei) があり、それぞれ次の動作が行われます。

種類 (Ei)	特別動作	値 (Ai) の範囲

1	指定の値 Ai だけ先へ進む	1~10

2	指定の値 Ai の金額を得る	1~100

3	指定の値 Ai の金額を支払う	1~100

最初の所持金は 0 円で、第 0 マス目からスタートし、第 Y マス目に到達するとゴールとなります。ゴールを越えた場合もゴールと見なします。スタートとゴールにイベントは無く、1 マスに複数のイベントが重なることはありません。イベントによって進んだ先のマスのイベントは無視します。所持金が 0 円より少なくなる場合は 0 円とします。

例えば、ある人生ゲームで得られるお金の期待値は以下のように計算できます。

この例では、スタート、イベントマス(100 円入手) 、ゴールの 3 つのマスと、1 か 2 が出るルーレットからなる人生ゲームが表されています。まず、1 回目にルーレットを回した時、1 が出ればイベントマスに到達し、所持金は 100 円になります。一方、2 が出た場合はゴールに到達し、所持金は 0 円のままです。これらはどちらも 2 分の 1 の確率で起こります。

さらに、1 回目でイベントマスに到達した場合は 2 回目のルーレットを回しますが、どの値が出てもゴールに到達し、所持金はどの場合も 100 円です。

このように、全部で 3 通りのゴールの仕方があります。ゴールした時点の所持金に着目すると、0 円になる場合が 1 通りでその確率は 2 分の 1、100 円になる場合が 2 通りでその確率が 4 分の 1 です。この場合、ゴールでの所持金の期待値は、ゴールの仕方ごとの (所持金 × その確率) を足した値であり、この人生ゲームの期待値は 50 円になります。

ルーレットの情報とボードの情報を入力とし、ゴール時の所持金の期待値を出力するプログラムを作成してください。

Input

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

X Y Z
V1 V2 ... VX
N1 E1 A1
N2 E2 A2
:
NZ EZ AZ

X (1 ≤ X ≤ 4)、Vi (1 ≤ Vi ≤ 10)、Y (1 ≤ Y ≤ 50)、Ni (1 ≤ Ni ≤ Y-1)、Z (0 ≤ Z ≤ Y-1)、Ei (1 ≤ Ei ≤ 3)、 Ai (1 ≤ Ai ≤ 100) は整数で与えられます。

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

Output

入力データセットごとに、最終的な所持金の期待値を１行に出力します。なお、所持金の期待値は小数点以下切り捨ての整数で出力してください。

Sample Input

1 2 0
1
1 2 1
1
1 2 100
1 2 1
2
1 2 100
2 2 1
1 2
1 2 100
4 5 3
1 2 3 4
1 1 2
2 2 100
4 3 60
0 0 0

Output for the Sample Input

0
100
0
50
20
図書整理

数の表わし方には色々な種類があり、私たちが普段使っている 10 進数は一つの代表的なものでしかありません。コンピュータ関連の知識がある人には、2 進数、16 進数あたりはとても身近なものです。

N さんは司書資格を活かして司書の仕事に就きました。最初の仕事は図書整理です。この図書館では、一冊ごとに一貫して番号が与えられており、それに従って本を整理しています。

この図書館では本の番号をマイナス十進数で表すことになっています。

マイナス十進数は、anan−1an−2...a2a1a0 (各ai は 0~9 の数字) と表記する方法であり、この数は次の数を表します。

an×(−10)n + an−1×(−10)n−1 + ... + a2×(−10)2 + a1×(−10)1 + a0×(−10)0

たとえば、マイナス十進数の 2156 は、以下のとおり十進数の-1944 に対応しています。

2×(-10)3 + 1×(-10)2 + 5×(-10)1 + 6×(-10)0 =

2×(-1000) + 1×(100) + 5×(-10) + 6×(1) =

-2000 + 100 - 50 + 6 = -1944

十進数の番号をマイナス十進数に直すのは大変なので、N さんは大変不自由な思いをしています。

本の番号を入力とし、 この番号のマイナス十進数表記を出力するプログラムを作成してください。

Input

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

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

Output

入力データセットごとに、番号のマイナス十進数表記を１行に出力します。

Sample Input

9
10
-10
-1944
-305432133
0

Output for the Sample Input

9
190
10
2156
1715573947
会津の埋蔵金

会津には古くから伝わる埋蔵金の伝説があります。あなたは、遂に埋蔵金が埋まっている場所を突き止めました。埋蔵金が埋まっている深さ、掘り進める地層の状態が分かっているので、綿密に計画を立てれば最小費用で埋蔵金まで到達することができます。そこであなたは、地層の状態を読み取って埋蔵金の埋まっている深さまで最小費用で到達するルートを算出するプログラムを作成することにしました。

地層の状態は 2 次元格子状に配置されたセルで表わされ、各セルの位置は座標 (x,y) で表されます。左上を (1,1) とし、x 座標は右に行くにつれて大きくなり、y 座標は下に深くなるにつれて大きくなるものとします。あなたは y 座標の一番小さいセルのうち一つを選んでそこから掘り始め、y 座標の一番大きいセルの一つまで掘り進めます。地層には以下の 2 種類のセルがあります：

土の詰まったセル。掘るのに、セルごとに決められた費用がかかる。

酸素のたまったセル。掘る必要はなく、セルごとに決まった量の酸素を補給できる。一度酸素を補給したセルの酸素はなくなり、再度の補給はできない。また、このセルに辿りついたら必ず酸素の補給をしなければならない。

あるセルから掘ることができるのは左右と下方向のセルのみです。
一度掘ったセルを左右に移動することはできますが、上に移動することはできません。

発掘にあたっては、酸素ボンベを携帯しなければなりません。酸素ボンベの残量が 0 になった瞬間、移動も発掘も酸素の補給もできなくなります。残量はセルを移動するたびに 1 減ります。酸素ボンベの残量が 0 で埋蔵金の埋まっている深さまで到達しても、到達したとみなされません。また、酸素のたまったセルでは酸素を補給することができますが、容量を超えた分は廃棄されます。

地層のサイズ 、発掘費用、酸素ボンベの容量、初期状態で持っている酸素の量、地層の情報を入力とし、一番深いセルまでたどりつくための最小費用を出力するプログラムを作成してください。ただし、最小費用が発掘費用を超えてしまう場合や、どのように掘り進めても埋蔵金にたどりつけない場合は“NA”と出力してください。

Input

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

W H
f m o
c1,1 c2,1 ... cW,1
c1,2 c2,2 ... cW,2
...
c1,H c2,H ... cW,H

１行目に地層の横方向のサイズ W, 縦方向のサイズ H (3 ≤ W, H ≤ 10) が与えられる。 ２行目にあなたの発掘費用を表す整数 f (1 ≤ f ≤ 10000)、酸素ボンベの容量を表す整数 m (3 ≤ m ≤ 50)、初期状態で持っている酸素の量を表す整数 o (o ≤ m) が与えられる。

続く H 行に地層の情報 ci,j が与えられる。ci,j は、座標 (i, j) に対するセルの情報を表し、以下の形式で与えられる：

負の値の場合、土の詰まったセルで、値は費用を表す

正の値の場合、酸素のたまったセルで、値は酸素の量を表す

ただし、酸素のたまったセルは 50 箇所以内である。

データセットの数は50 を超えない。

Output

データセットごとに、最少費用または NA を1行に出力する。

Sample Input

3 3
100 10 10
-100 -20 -100
-100 -20 -100
-100 -20 -100
3 3
100 10 10
-100 -20 -100
-100 -20 -20
-100 -60 -20
3 3
100 10 3
-100 -20 -100
-20 -20 -20
-20 -100 -20
3 3
100 3 3
-100 -20 -30
-100 -20 2
-100 -20 -20
4 5
1500 5 4
-10 -380 -250 -250
-90 2 -80 8
-250 -130 -330 -120
-120 -40 -50 -20
-250 -10 -20 -150
0 0

Output for the Sample Input

60
80
NA
50
390
サージェント・ライアン

「ライアン軍曹を救え」という指令のもと、アイヅ軍の救出部隊はドイツリーの水上都市で敵軍と激しい戦闘を繰り広げていました。彼らは無事に軍曹と合流しましたが、敵の戦車が多く、救出ヘリを呼べずにいました。そこで、彼らは敵の戦車を混乱させるため、都市にある橋を全て爆破するという作戦を実行することにしました。

作戦はすぐに司令部に伝えられ、救出ヘリの準備が進められました。救出ヘリを飛ばすためには、いつ橋が全て爆破されるかを予測しなければなりません。軍のプログラマであるあなたの任務は、救出部隊が全ての橋の爆破に必要な時間を計算することです。

水上都市は N 個の島で構成されており、島と島との間には橋がかかっています。すべての島はツリー状に繋がっています(下図参照) 。ある島からある島への経路は、一通りだけ存在します。各橋を渡るには、橋ごとに決められた時間がかかり、どちらの方向にもその時間で橋を渡ることが可能です。

救出部隊はボートなど水上を移動する手段を持っていないので島と島の間を移動するには橋を通る他ありません。救出部隊は、その時いる島に隣接している橋のうち、必要なものを一瞬で爆破することができます。救出部隊が全ての橋を爆破するのに必要な最小の時間はいくらでしょうか。ただし、島の中での移動時間は考えません。

島の数、それぞれの橋情報を入力とし、橋を全て爆破するのに必要な最小の時間を出力するプログラムを作成してください。島はそれぞれ 1 から N の番号で表されます。橋は N-1 本あります。橋情報は、その橋が隣接している二つの島の番号(a, b)と、その橋を渡るのに必要な時間 t で構成されます。救出部隊は島番号 1 の島からスタートするものとします。

Input

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

N
a1 b1 t1
a2 b2 t2
:
aN-1 bN-1 tN-1

入力はすべて整数で与えられる。1 行目に島の数 N (2 ≤ N ≤ 20) が与えられる。

続く N-1 行に i 番目の橋の情報が与えられる。 ai, bi, ti (1 ≤ ti ≤ 500) は、i 番目の橋を通って島 ai と島 bi の間を時間 ti で移動できることを表す。

データセットの数は 100 を超えない。

Output

データセットごとに、橋を全て爆破するのに必要な最小の時間を1行に出力する。

Sample Input

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

Output for the Sample Input

12
宇宙人のメッセージ

宇宙人 Mr.X は地球への来星記念として、地球人に向けてのメッセージを残しました。 Mr.X がメッセージを残す場所に選んだのは古代遺跡として有名な"トロンコ遺跡"でした。 ここはいろいろな大きさの碁盤のマス目に、奇抜な石像が無造作に配置されている不思議な場所でした。

Mr.X は、メッセージとして、石像が置かれていない全てのマス目を一度だけ通る、単一の閉曲線を描きました。Mr.X はとても賢く、このような閉曲線を描くことが可能な碁盤であれば必ず閉曲線を描き、メッセージを残しました。しかし、石像の配置によっては、閉曲線を描くことが不可能な碁盤もあり、その場合はメッセージを残しませんでした。 図1の碁盤に描かれている閉曲線は、全ての空いているマス目を一度だけ通っています。Mr.X はこのような閉曲線をメッセージとして残しました。

図1

Mr.X は、図2の碁盤に描かれているような閉曲線は描きませんでした。

図2

後に Mr.X のメッセージは、古代遺跡と見事に調和した宇宙人の美として、地球人に夢とロマンを与える伝説となりました。しかし、長年に渡る風化によってメッセージは消えてしまい、伝説だけが残りました。

碁盤の情報を入力とし、Mr.X がその碁盤上にメッセージを残した場合は Yes と、残さなかった場合は No と出力するプログラムを作成してください。ただし、全てのマスに石像が配置されている場合は、No と出力することとします。

Input

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

W H
c1,1 c1,2 ... c1,W
c2,1 c2,2 ... c2,W

:
cH,1 cH,2 ... cH,W

1 行目に碁盤の横方向に並ぶマス目の数 W, 縦方向に並ぶマス目の数 H (1 ≤ W, H ≤ 7) が与えられる。

続く H 行に碁盤の状態が与えられる。ci,j は碁盤の i 行目の左から j 番目のマス目を表す整数であり、0 のとき何も置かれていないマス目、1 のとき石像が置かれているマス目を表す。

データセットの数は 1000 を超えない。

Output

データセットごとに、Yes または No を１行に出力する。

Sample Input

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

Output for the Sample Input

Yes
No
最後の扉

秘境の地"ナラマンダ地方"

この奥深い洞窟に眠る黄金の伝説を求め、探検家ボブとマイクは様々な困難に立ち向かいました。ようやくたどり着いた最後の扉。この先には夢に見た黄金が待っています。

その扉には多数の三角形が描かれていました。試しにマイクがその 1 つに触れてみると、その三角形は光を放ちました。光は三角形の底辺から垂直に頂点方向へ長方形を描きながら伸びていき、その先にある別の三角形に触れました。すると、光に触れた三角形も同じように光を放ち、それを繰り返していきました。

扉の三角形は全て二等辺三角形(正三角形は含まない)で、どれも同じ大きさで、どれも重ならず（かつ触れることなく）、またどれも光は一定の距離だけ伸びていました。最後の三角形が光り終えると、そこには何事もなかったかのような静けさが戻ってきました。

ボブは自分の足下に奇妙なメッセージを見つけました。

「むやみに触れるべからず。汝正しくこの扉に触れたとき、この扉は放たれん。 」

ボブとマイクはこのメッセージの意味を考えながら、 何度も三角形に触れてみましたがなかなか扉は開きません。 しかし、それを繰り返していくうちに、二人はメッセージの意味がだんだん分かってきました。

「"むやみに触れるべからず"とは、扉に触れる回数は最小ということ。

できるだけ少ない回数で触れて、全ての三角形を光らせれば、きっと扉は開くはずだ!」

例えば、扉には図 1 のように複数の二等辺三角形が描かれています。

図 1

最初に左下の三角形に触れると、図 2 に示すように、その三角形の底辺から垂直に頂点方向へ光が放たれ、その光が触れる三角形が次々に光ります。

図 2

次に左端の三角形に触れると、図 3 に示すように、全ての三角形が光ります。この手順が全ての三角形を光らせるための最少の手数(2 手)となります。

図 3

さあ、ボブとマイクが最後の扉を開ける手助けをしよう。

扉に描かれている三角形の個数、光の伸びる長さ、それぞれの三角形の頂点の座標を入力とし、全ての三角形を光らせるために扉に触れる最少の回数を出力するプログラムを作成して下さい。光の伸びる長さは、底辺からの長さであるものとします。また、光はそれを放つ三角形の頂点を含むような十分な長さを持ちます。

なお、この問題を解くにあたっては、2 点の距離が 0.01 以下の場合には、同一の点と処理します。また、1 点とひとつの直線の距離が 0.01 以下の場合には、この点はこの直線上にあるとして処理します。

Input

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

n d
T1
T2
:
Tn

１行目に扉に描かれている三角形の個数 n (1 ≤ n ≤ 100) と光の伸びる長さを表す整数 d (1 ≤ d ≤ 1000) が与えられる。

続く n 行に各三角形の情報 Ti が以下の形式で与えられる。

x1 y1 x2 y2 x3 y3

三角形の３つの頂点の座標が整数で与えられる(-1000 ≤ x1, y1, x2, y2, x3, y3 ≤ 1000)。

データセットの数は 20 を超えない。

Output

データセットごとに、扉に触れる最少の回数を1行に出力する。

Sample Input

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

Output for the Sample Input

1
3
勉強を開始した時刻と終了した時刻の情報を基に、1日で勉強した時間の合計が t 以上であるかをチェックし、達していない場合は足りない時間を求めるプログラムを作成します。時間は1時間を1単位とし、分や秒は考えないものとします。時刻は24時間表記で1時間単位で表します。

1日の勉強の目標時間と、実際に勉強した時間の情報（勉強の回数 n、それぞれの勉強の開始時刻 s と終了時刻 f）を入力とし、勉強時間の合計が目標に達しているかを調べ、達していれば "OK" を、達していない場合は足りない時間を出力するプログラムを作成してください。ただし、それぞれ行った勉強時間は重複しません。

例：

目標時間
勉強した時間
判定

10時間
6時〜11時 ＝ 5時間

12時〜15時 ＝ 3時間

18時〜22時 ＝ 4時間
OK

14時間
6時〜11時 ＝ 5時間

13時〜20時 ＝ 7時間

2時間不足

入力

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

t
n
s1 f1
s2 f2
:
sn fn

１行目に１日の目標時間 t (0 ≤ t ≤ 22)、 ２行目に勉強の回数 n (1 ≤ n ≤ 10)が与えられます。続く n 行に i 回目の勉強の開始時刻 si と終了時刻 f (6 ≤ si, fi ≤ 22) が与えられます。

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

出力

データセットごとに、OK または足りない時間を１行に出力します。

入力例

10
3
6 11
12 15
18 22
14
2
6 11
13 20
0

出力例

OK
2
カロリー計算

食べ物には3大栄養素と呼ばれる「たんぱく質」「脂質」「炭水化物」の３つの栄養素が含まれています。１g（グラム）あたりたんぱく質と炭水化物は 4 kcal（キロカロリー）、脂質は 9 kcal と計算されます。たとえば、下の表によると番号１のケーキにはタンパク質 7 g、脂質 14 g、炭水化物 47 g が含まれています。これをもとに含まれるカロリーを計算すると、4 × 7 + 9 × 14 + 4 × 47 = 342 kcal となります。その他も同様に計算されています。

番号	名前	たんぱく質(g)	脂質(g)	炭水化物(g)	カロリー(kcal)

1	ケーキ	7	14	47	342

2	ポテトチップス	5	35	55	555

3	どら焼き	6	3	59	287

4	プリン	6	5	15	129

分類の対象となるお菓子の個数 n と各お菓子の情報、制限の情報を入力とし、そのお菓子一つだけなら制限を超えることがない（食べてもよい）お菓子の一覧を出力するプログラムを作成してください。

お菓子の情報は、お菓子の番号 s、そのお菓子に含まれるたんぱく質の重量 p、脂質の重量 q、炭水化物の重量 r から構成されています。制限の情報には、含むことができる最大のたんぱく質の重量 P、脂質の重量 Q、炭水化物の重量 R、および摂取することができる最大のカロリー C からなっており、タンパク質、脂質、炭水化物、カロリーのいずれかの一つでも超えると制限違反となり、「食べてはいけないお菓子」と判断されます。

食べてもよいお菓子の一覧は、食べてもよいお菓子の番号を入力順に出力してください。なお、食べてもよいお菓子がなければ”NA”と出力してください。
上の表にある4個のお菓子について、P = 10, Q = 15, R = 50, C = 400 という制限の場合、ケーキとプリンはそれぞれの栄養素及びカロリーが制限値以下なので食べてもよいお菓子に分類されますが、ポテトチップスは炭水化物とカロリー、どら焼きは炭水化物の量が制限値を超えているため食べてはいけないお菓子に分類されます。

入力

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

n
s1 p1 q1 r1
s2 p2 q2 r2
:
sn pn qn rn
P Q R C

1行目にお菓子の数 n (1 ≤ n ≤ 1000)が与えられます。続く n 行に第 i のお菓子の番号 si (1 ≤ si ≤ 1000)、各栄養素の重量を表す整数 pi, qi, ri (0 ≤ pi, qi, ri ≤ 100) が与えられます。

続く行に各栄養素及びカロリーの制限値を表す整数 P, Q, R (0 ≤ P, Q, R ≤ 100), C (0 ≤ C ≤ 1700) が与えられます。

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

出力

データセットごとに、食べてもよいお菓子の番号または ”NA” を出力します。

入力例

4
1 7 14 47
2 5 35 55
3 6 3 59
4 6 5 15
10 15 50 400
2
1 8 10 78
2 4 18 33
10 10 50 300
0

出力例

1
4
NA
金利計算

金利は銀行に預けているお金に付き、その計算方法や利率は銀行によって様々です。利息と元金を合わせたものを元利と呼びますが、元利の計算方法として、利息を元金に組み入れずに計算する「単利」と利息を元金に組み入れて計算する「複利」というものがあり、より多くの元利を得るためにはこの差異を理解していなければなりません。元利の計算方法は以下のようになります。

銀行の数、お金を預ける年数、各銀行の情報（銀行番号、金利の種類、年利率（パーセント））を入力とし、最も元利が高くなる銀行番号を出力するプログラムを作成してください。ただし、最も元利が高くなる銀行は一つだけです。

入力

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

n
y
b1 r1 t1
b2 r2 t2
:
bn rn tn

1行目に銀行の数 n (1 ≤ n ≤ 50)、2行目にお金を預ける年数 y (1 ≤ y ≤ 30)が与えられます。続くn 行に i 番目の銀行の銀行番号 bi、年利率を表す整数 ri (1 ≤ ri ≤ 100)、 金利の種類 ti (1 または 2) が与えられます。金利の種類 ti は、単利の場合は1、複利の場合は2で与えられます。

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

出力

データセットごとに、最も元利が高くなる銀行番号を１行に出力します。

入力例

2
8
1 5 2
2 6 1
2
9
1 5 2
2 6 1
0

出力例

2
1
四元数のかけ算

複素数を拡張したものに四元数と呼ばれるものがあります。物体の回転などを表現するのに便利なので、ロボットの腕の制御などに使える便利な数です。四元数は、４つの実数 $x$、$y$、$z$、$w$ と特別な数（虚数を拡張したもの）$i$、$j$、$k$ を用いて、$x + yi + zj + wk$ と表されます。このような四元数の和は次のように定義されます。

$(x_1 + y_1 i + z_1 j + w_1 k) + (x_2 + y_2 i + z_2 j + w_2 k) = (x_1 + x_2) + (y_1 + y_2)i + (z_1 + z_2)j + (w_1 + w_2)k$

一方、1、$i$、$j$、$k$ の間の積は次のように与えます。

この表は、２つの特別な数 $A$ と $B$ の積 $AB$ を表しています。例えば、 $i$ と $j$ の積 $ij$ は $k$ であり、 $j$ と $i$ の積 $ji$ は $-k$ であることを表しています。

一般の四元数の積は、この関係を満たすように計算されます。例えば、2つの四元数、$1+2i+3j+4k$ と$7+6i+7j+8k$ の積は次のように計算します。

$(1+2i+3j+4k) \times (7+6i+7j+8k)=$

$7+6i+7j+8k$

$+14i+12i^2+14ij+16ik$

$+21j+18ji+21j^2+24jk$

$+28k+24ki+28kj+32k^2$

上の表を適用することにより

$= -58+16i+36j+32k$

となります。

4つの係数$x$、$y$、$z$、$w$ が整数でかつすべてがゼロとはならない2つの四元数 ($x_1+y_1 i+z_1 j+w_1 k$) と($x_2+y_2 i+z_2 j+w_2 k$)を入力とし、その積を($x_3+y_3 i+z_3 j+w_3 k$)とする時の$x_3$、$y_3$、$z_3$、$w_3$ を出力するプログラムを作成してください。

入力

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

$n$

$data_1$

$data_2$

:

$data_n$

1行目に処理を行う四元数の組の個数 $n$ ($ n \leq 10$) が与えられます。続く $n$ 行に $i$ 番目の四元数の組の情報 $data_i$ が次の形式で与えられます。

$x_1$ $y_1$ $z_1$ $w_1$ $x_2$ $y_2$ $z_2$ $w_2$

与えられる係数はすべて-1000 以上1000 以下とします。データセットの数は 50 を超えません。

出力

データセットごとに、与えられた四元数の組の積を出力します。

入力例

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

出力例

-58 16 36 32
-50 32 28 48
入力候補

携帯電話には、メールなどの文章を効率良く入力するために入力候補を表示する機能が搭載されています。これは、使われる頻度が高い単語を記録しておき、入力された文字を頭文字に持つ単語を入力候補として提示するものです。例えば、普段”computer”という単語を多く入力しているなら、”c”と入力するだけで候補として”computer”が提示されます。このような機能の基本部分を作成してみましょう。

文章、文字を入力とし、その文字を頭文字に持つ単語を出現数の順に出力するプログラムを作成してください。ただし、出現数が同じ単語が複数ある場合は、辞書式順序で出力します。出力する単語は最大5つまでとします。該当する単語が存在しない場合は”NA”と出力してください。

入力

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

n
line1
line2
:
linen
k

1行目に文章の行数 n (1 ≤ n ≤ 10) が与えられます。続く n 行に文章が与えられます。文章は半角英小文字と半角空白からなり、１行の文字数は1文字以上1024文字以下とします。空白によって区切られる単語は1文字以上20文字以下です。

続く行に頭文字 k が半角英字で与えられます。

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

出力

データセットごとに、指定された文字を頭文字にもつ単語または”NA” を出力します。

入力例

1
ben likes bananas the best among many fruits because bananas are sweet and cheap
b
1
winners get to visit aizu and the university of aizu and make many friends as well
a
3
ask alex about
the answer for the
assignment on android apps
a
2
programming is both
a sport and an intellectual puzzle
c
0

出力例

bananas because ben best
aizu and as
about alex android answer apps
NA
塗りつぶしゲーム

指で画面にタッチして操作することのできるタブレットインターフェースの技術は、ゲームの分野でも応用され、新しい操作感を持つ様々な種類のゲームが作られています。現在、ＡＺ社が開発しているゲームもその一つです。

このソフトウェア（ゲーム）の要件は以下の通りです。

画面には X 列× Y行の2次元グリッドがあります。

グリッドのセルは赤(R)、緑(G)、茶(B)の3色のいずれかで塗られています。

セルの色を変更するボタンR、G、Bがあり、このボタンが押下されると一番左上(0,0)のセルがその色に変更されます。

一番左上のセルの色が変更されると、そのセルの元の色と同じ色に塗られた隣接するすべてのセルが指定された色に変わります。すなわち、元の色が同じ色のセルでつながったセルはすべて指定された色に変更されます。

このようにグリッドを塗りつぶしていき、最終的にグリッド全体を一色にするというゲームです。少ない手順で解くと高得点が与えられます。

ＡＺ社のプログラマーであるあなたは、このゲームのロジックの一部分を開発することになりました。まずは、この最高得点を計算するため、このゲームを最短で解いた場合、最低何回選択ボタンを操作すればグリッドが一色になるかをもとめるプログラムを作ることにしました。

入力

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

X Y
c1,1 c2,1 ... cX,1
c1,2 c2,2 ... cX,2
:
c1,Y c2,Y ... cX,Y

1行目にグリッドの列と行のサイズ X, Y (2 ≤ X, Y ≤ 10) が与えられます。続く Y 行に i 列目 j 行目のセルの色を表す文字 ci,j が空白区切りで与えられます。

出力

データセットごとに、ボタン操作の最少回数を1行に出力します。

入力例

3 3
R G B
G G G
G B B
2 4
R G
G G
R B
B R
4 3
G G B R
G R R G
B G G R
0 0

出力例

2
4
4
温泉旅行

温泉好きのたけしさんは、次の長期休暇を利用してとある温泉地への旅行を計画しています。移動は長距離バスを乗り継ぎ、なるべくお金をかけずに目的地へたどり着きたいと思っています。貯金があるとはいえ、資金に心許ないたけしさんは、おじいさんに相談することにしました。計画を聞いて感心したおじいさんは、たけしさんに特別な切符を渡しました。

その切符は、長距離バスの連続した2区間を1回だけ無料で乗れるというものでした。使いようによってはかなりの移動費削減が見込めますが、より大きな効果を発揮させるためにはしっかりした計画を練る必要があります。

出発地と目的地、及び中継地点が合わせて n 個、2つの地点を結ぶ路線が m 個与えられます。各地点にはそれぞれ 1 から n までの数字が割り振られています。出発地は 1、目的地は n です。路線の情報は、その路線が結ぶ2つの地点 a と b、及びその料金 c で表されます。特別な切符の効力により、任意の地点から、一度だけ連続した2つの路線を料金0で通過することができます。ただし、途中で目的地を通過しても、目的地にたどり着いたことにはなりません。

出発地、目的地、及び中継地点の総数 n と路線の数 m、各路線の情報を入力とし、料金の最小値を出力するプログラムを作成してください。ただし、必ず出発地から目的地へと到達する経路が存在するものとします。

入力

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

n m
a1 b1 c1
a2 b2 c2
:
am bm cm

1行目に出発地、目的地、及び中継地点の総数 n (2 ≤ n ≤ 100)と路線の数 m (1 ≤ m ≤ 300)が与えられます。続く m 行に各路線の情報 ai, bi, ci (1 ≤ ci ≤ 1000) が与えられます。

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

出力

入力データセットごとに、料金の最小値を1行に出力します。

入力例

2 1
1 2 5
3 2
1 2 5
2 3 5
6 9
1 2 7
1 3 9
1 5 14
2 3 10
2 4 15
3 4 11
3 5 2
4 5 9
4 6 8
0 0

出力例

5
0
7
タイムセール

より良い物を、より安く。今日もどこかのスーパーマーケットで行われるタイムセールでは、激しい闘いが繰り広げられています。ここ会津にある「LL堂」もそんなスーパーマーケットのひとつで、他のチェーン店と対抗すべく、少し変わったタイムセールを実施しています。一般的なタイムセールでは複数の商品が同じ時間に安くなるものですが、LL堂では対象となる商品によって、タイムセールを開始する時間が別々に設定されています。

坂井家はLL堂をよく利用する家庭の一つです。そんな坂井家では、奥様主導のもと、次の日曜に行われるタイムセールに向けて作戦会議を開き、どのような順番で買い物をすれば値引きが最大となるかを分析することになりました。店内を熟知している坂井家は売り場の見取り図を書き、また欲しい品物がどこにあるか、値引きは幾らであるか、売り切れるまでの時間を把握することに成功しました。
ここまでは完璧だった坂井家ですが、分析を行える人がいませんでした。そこで坂井家と親交があったあなたはプログラムを書くことにしました。一人の人が動くことを想定してシミュレーションを行います。

商品は10種類あり、数字1桁の商品番号 g によって 区別されます。タイムセール情報には商品番号 g、 値引き額 d、タイムセールの開始時刻 s と売り切れ時刻 e があります。

店内は横 X、縦 Y のマスで構成される2次元 グリッドで表され、マスごとに通路、商品棚の どちらかが割り当てられています。一つの商品棚には 1種類の商品があり、それは商品番号 g で区別されます。
どの商品を買ってもよいですが、同じ商品番号の商品を複数買ってはいけません。商品棚からは、上下左右に隣接する通路のマスならどんな向きでも商品を取れます。

タイムセールが始まる時刻から商品を取ることができますが、売り切れる時刻からは商品を取ることができません。また、時間は入店した時点で0から始まります。

移動は現在いるマスから上下左右の隣接する通路マスに移動することができますが、商品棚のマスに移動することはできません。グリッドで表される店の外に出ることもできません。１回移動する毎に１単位時間経過します。また、商品を取る時間は考えないものとします。

店内の見取り図と買い物をする人の初期位置と商品のタイムセール情報を入力とし、取ることのできた商品の値引き額の合計の最大値を出力するプログラムを作成してください。

入力

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

X Y
m1,1 m2,1 ... mX,1
m1,2 m2,2 ... mX,2
:
m1,Y m2,Y ... mX,Y
n
g1 d1 s1 e1
g2 d2 s2 e2
:
gn dn sn en

1行目に店舗の大きさX, Y (3 ≤ X, Y ≤ 20) が与えられます。続く Y 行に i 列目 j 行目の店内情報 mi,j が以下の内容で与えられます。

. (ピリオド) ：通路のマス

数字 ：商品の番号

P ：買い物をする人の初期位置のマス

続く行にタイムセール情報の数 n (1 ≤ n ≤ 8) が与えられます。続く n 行に i 番目のタイムセール情報 gi di si ei が与えられます(0 ≤ gi ≤ 9, 1 ≤ di ≤ 10000, 0 ≤ si, ei ≤ 100)。

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

出力

データセットごとに、取ることのできる商品の値引き額合計の最大値を１行に出力します。

入力例

6 5
1 1 . 0 0 4
1 . . . . .
. . 2 2 . .
. . 2 2 3 3
P . . . . .
5
0 50 5 10
1 20 0 10
2 10 5 15
3 150 3 5
4 100 8 9
0 0

出力例

180
ばらばら饅頭

会津若松市にある和菓子屋・友栗堂の店長さんは、とても腕のいい職人さんなのにちょっと気分屋なのが玉にキズです。店長さんの作る饅頭はとても美味しいのですが、その時の気分によって大きさがまちまちになってしまいます。

見かねた店長さんの奥さんは、大きさと重さがばらばらな饅頭を袋に詰めて売り出すことを思いつきました。一定の重さになるように饅頭を袋に詰めて売れば、一つ一つの大きさはばらばらでも一定の値段で売り出すことが出来ますし、どんな饅頭が入っているのか開けるまでわからないというサプライズも売りになるかもしれません。
「ばらばら饅頭」という名前で売りだしたところ、新しいアイディアが話題となり友栗堂はたちまち評判となりました。しかし、問題もあり、袋に入れる饅頭の組み合わせ方によって作れる「ばらばら饅頭」の数が変わり、無駄が発生してしまうことがありました。アルバイトで友栗堂に来ていたあなたは無駄なく袋に詰めるためにプログラムをつくることにしました。

饅頭の重さは1から9の9種類あります。袋に詰める時には、饅頭の重さの合計がぴったり10になるように詰め込みます。饅頭の組み合わせ方は1+1+2+4+2=10や1+1+1+1+1+5=10などで、同じ重さの饅頭をいくつ使っても構いません。

作られる饅頭の個数と饅頭の重さの情報を入力とし、作ることのできる「ばらばら饅頭」の最大の数を出力するプログラムを作成してください。

入力

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

n
m1 m2 ... mn

1行目に饅頭の個数 n (2 ≤ n ≤ 100) が与えられます。
2行目に各饅頭の重さmi (1 ≤ mi ≤ 9) が与えられます。

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

出力

データセットごとに、詰め込むことのできた「ばらばら饅頭」の最大の数を1行に出力します。

入力例

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

出力例

1
4
4
氷の迷路

四角のマスを縦横にならべた長方形の迷路があります。この迷路では東西南北の隣接するマスへ移動しながら、スタートのマスSを出発し、ゴールのマスGを目指します。マスの種類には、平原、山、氷の３種類があります。SとGは、平原のマスに置かれています。平原のマスには移動できますが、山のマスには移動できません。氷のマスは移動できますが、条件によって氷が割れ動けなくなります。

氷のマスは東西南北に隣接するもの全体でひとつの塊として扱われます。

氷の塊のなかで、マスの個数の半分より多くのマスに移動すると、塊全体が割れます。

例えば、図１は与えられた迷路の最短経路のステップ数が 11 であることを示しています。

図1

しかし、図２のように氷のマスを通って近道をしようとすると、大きさが６の氷の塊に対する４回目の移動後に動けなくなってしまいGには到達できません。

図2

このような迷路の情報を入力とし、SからGまでの最短経路のステップ数を求めるプログラムを作成してください。マスの種類はそれぞれ以下の文字で表されます：

文字（半角）
マスの種類

. （ピリオド）
平原

#（シャープ）
山

X
氷

与えられる迷路は必ず解けるものとします。迷路はその東西方向のマスの数 X、南北方向のマスの数 Y と X × Y 個の文字として与えられます。

入力

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

X Y
line1
line2
:
lineY

1行目に迷路の大きさを表す整数 X, Y (2 ≤ X, Y ≤ 12) が与えられます。続く Y 行に迷路の i 行目の情報 linei (長さ X の半角英文字列) が与えられます。

データセットの数は 40 を超えない。

出力

データセットごとに、最小のステップ数を１行に出力します。

入力例

5 5
.X.S.
.X#..
.XX##
.#XG.
..X..
7 3
SXX.XXG
X.#.#X.
XXX.XX#
4 4
S...
X.X.
GX..
...X
10 10
..XXXXX.XX
.X.#.#X.XX
SX.#X.X..X
#X.##.X.XX
..XXXX#.XX
##.##.##XX
....X.XX#X
.##X..#X#X
....XX#..X
...#XXG..X
0 0

出力例

11
10
10
33
魔法陣

人里離れた森の奥深くに、マリーという名の魔女が住んでいました。彼女は魔女なので、食料・水・燃料など、生活に必要なものを魔法によってまかなっています。

彼女の魔法は、魔力を込めたいくつかの石と紐を使って、魔法陣を描くことによって発動します。この魔法陣は、石を設置し、いくつかの石のペアを紐で繋ぐことで描かれます。ただし、紐は弛んでいてはいけません。さらに、どの紐も、(両端を除いて) 他の紐や石に触れてはいけません。もちろん、同じ場所に複数の石を置くこともできません。この制約が守られる限り、石と石の位置関係や紐の長さに制限はありません。また、石は十分小さいので点として扱うことができ、紐は十分細いので線分として扱うことができます。さらに、彼女は同じ石のペアを2本以上の紐で繋ぐことも、ある紐の両端を同じ石に結ぶこともありません。

マリーは初め、石を彼女の家の平らな壁に貼り付けて魔法陣を描いていました。しかし、彼女はやがて、どうしても作ることのできない魔法陣があることに気付いたのです。しばらくして、彼女は魔法陣を平らな壁、つまり二次元平面の上で作ることができるか判定する方法を編み出しました。ある魔法陣は、次のような部分を含む場合、またその場合に限って、二次元平面上で作ることができないのです。

図１ 頂点数 5 の完全グラフ

図２ 頂点数 3, 3 の完全二部グラフ

このような魔法陣を描くために、彼女は石を空中に固定する魔法を編み出しました。三次元空間では、これらの魔法陣も描くことができるのです。それどころか、どんな魔法陣も三次元空間中では描くことができることを彼女は突き止めたのです。

さて、ここからが問題です。ある日マリーは、彼女の家の玄関に足元灯の魔法陣を作ることにしました。しかし、彼女は既に狭い玄関にいろいろな魔法陣を設置していたので、足元灯の魔法陣を、残された唯一のスペースである一次元の直線の上に描かなければなりません。彼女が設計したいくつかの足元灯の魔法陣について、それが直線の上に描けるかどうかを判定し、描ける場合 yes と、そうでない場合 no と出力するプログラムを作成して下さい。

魔法陣は、石の個数 n、紐の本数 m、m 個の紐の情報で与えられます。紐は、その両端の石の番号 u、v で表されます。石には 1 から n までの番号が与えられ、n は 1 以上 100,000 以下、m は 0 以上 1,000,000 以下とします。

入力

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

1 行目 石の個数 n 紐の本数 m（整数 整数；半角空白区切り）

2 行目 第1の紐の情報 u v（整数 整数；半角空白区切り）

3 行目 第2の紐の情報

:

m+1 行目 第 m の紐の情報

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

出力

入力データセットごとに、yes または no と１行に出力します。

入力例

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

出力例

yes
no
yes