alexjercan/bugnet huggingface dataset:
図画工作

イヅア大学附属小学校は日本有数の競技プログラマー養成校として有名です。この学校の教員は幅広い
アルゴリズムの知識を持ち、日々それを活用しています。教員であるあなたは、今年は図画工作の授業
を担当することになりました。この授業では、児童全員がそれぞれ１年間で一つの課題を完成させることになっています。授業の概要は以下のとおりです。

１年間で授業は D 回（同じ日に2 回以上授業はない）あり、その全てが課題制作に充てられる。

制作する課題は M 種類用意されている。

それぞれの児童に、M 種類の中から課題を１つずつ割り当てる。

児童は N 人であり、N 人それぞれに異なる課題が割り当てられる。

児童は、K 種類ある部品のうちいくつかの種類の部品を使用して課題を完成させます。課題の制作の概要は以下のとおりです。

課題ごとに、使用すべき部品の種類と数はあらかじめ決められている。

課題が完成するまでに使用する部品の種類と数は、その課題で使用すべき部品の種類と数に、過不足なく一致していなければならない。

異なる課題でも、使われる部品の種類と数がすべて同じ場合もある。

どの課題も、同じ種類の部品は２個までしか使用できない。

部品を使用する順序は課題の完成に影響を与えない。

いくつかの部品が入っている袋が事前に P 個用意されている。ただし、異なる袋でも、入っている部品の種類と数がすべて同じ場合もある。

教員は、児童１人につき袋を１つだけ渡すことができる（袋を渡さない児童がいてもよい）。

２人以上の児童に同じ袋を渡すことはできない（反対に、誰にも渡されない袋があってもよい）。

袋を渡された児童は、袋の中に入っている部品をすべて、自分が制作する課題に使わなければならない。

袋に入っている部品以外で課題に使用する部品は、別途購入する必要があります。部品の購入に関する条件は以下のとおりです。

部品は授業の日だけ購入でき、その日にしか使えない。

それぞれの課題について、１回の授業でＬ個までの部品を購入することができる。

部品の種類によって価格が設定されており、購入する日によって価格が変動する。ただし、どの種類も品切れになることはない。

あなたは、このような条件下で、授業にかかる経費をなるべく抑えたいと考えています。そこで、児童全員の部品購入費の合計の最小値を計算するプログラムを作成することにしました。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ３つの行で示される。各データセットは以下の形式で与えられる。

D K L
c1,1 c1,2 ... c1,K
c2,1 c2,2 ... c2,K
:
cD,1 cD,2 ... cD,K
M N P
r1,1 r1,2 ... r1,K
r2,1 r2,2 ... r2,K
:
rM,1 rM,2 ... rM,K
t1,1 t1,2 ... t1,K
t2,1 t2,2 ... t2,K
:
tP,1 tP,2 ... tP,K

各行で与えられる数値は１つの空白で区切られている。

D（1 ≤ D ≤ 8）は授業の回数、K（1 ≤ K ≤ 8）は部品の種類の数、L（1 ≤ L ≤ 8）は１日に購入することができる部品の数を示す。cd,k （1 ≤ cd,k ≤ 100）は d 日目の部品k の価格を示す。

M（1 ≤ M ≤ 200）は課題の種類の数、N（1 ≤ N ≤ M）は生徒の人数、P（1 ≤ P ≤ 200）は袋の数を示す。

rm,k （0 ≤ rm,k ≤ 2）は課題 m に必要な部品 k の個数、tp,k （0 ≤ tp,k ≤ 2）は袋 p に入っている部品 k の個数を示す。

部品を１つも必要としない課題や、空の袋は与えられないものとする。

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

出力

データセットごとに、生徒全員の部品購入費の合計の最小値を１行に出力する。Ｎ種類の作品を完成させることができない場合は -1 を出力する。

入力例

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

出力例

-1
9
6
7
鉄道路線

ある国の鉄道網に、自動改札を導入することになりました。導入にあたって難しい問題の一つは、与えられた切符で、指定された駅の間を移動できるかどうかを判定することです。それぞれの切符には乗車駅と降車駅が記載されています。この切符でできるのは、「乗車駅で乗って、降車駅で降りる」ことだけではなく、途中乗車や途中下車も許されています。

この鉄道網にはS 個の駅があり、そのうちR 組の駅は隣り合っていて、他の駅を経由せずに双方向に鉄道で移動することができます。隣り合った駅を結ぶ線路はひとつしかありません。隣り合った駅の間の距離は、この線路に沿って測った距離です。ある駅からある駅までの経路は鉄道網の形状によっては複数通り考えられますが、そのうち最も距離が短くなるような経路を最短経路と呼ぶことにします。そのような経路が複数ある場合、どちらも最短経路として認められます。

乗車駅 a、降車駅 b の切符で駅 c から駅 d まで移動できるのは、以下の条件をすべて満たす経路 p が存在するときです。

経路 p は、駅 a から駅 b への最短経路である。

経路 p は、駅 a から出発し、駅 c、駅 d の順に経由し、駅 b で終わる経路である。また、駅 c から駅 d の区間はこの2 駅の最短経路になっている。

路線図と切符の情報が与えられます。次に、始点と終点の組がいくつか与えられるので、その切符で始点から終点へ移動できるかどうかを判定するプログラムを作成してください。

入力

入力は１つのデータセットからなる。入力データは以下の形式で与えられる。

S R
u1 v1 w1
u2 v2 w2
:
uR vR wR
a b Q
c1 d1
:
cQ dQ

各行で与えられる数値は１つの空白で区切られている。

１行目は２つの整数からなる。S (2 ≤ S ≤ 100000) は鉄道路線図に現れる駅の数、R (1 ≤ R ≤ 200000) は隣り合った駅の組の数である。続く R 行に、隣り合った駅の間を直接つなぐ線路の情報が与えられる。ui と vi (1 ≤ ui, vi ≤ S) は i 番目の線路の両端の駅の番号を示す。wi (1 ≤ wi ≤ 1000) はこれらの駅の間の距離を表す整数である。ただし、各駅には 1 から S までの番号が重複なく割り振られており、ui ≠ vi とする。

続く１行は３つの整数からなる。最初の２つの整数は切符の区間を表し、a は乗車駅、b は降車駅 (1 ≤ a, b ≤ S) である。３つ目の整数 Q (1 ≤ Q ≤ 40000) は質問の数を示す。続く Q 行に質問が与えられる。 ci とdi (1 ≤ ci, di ≤ S)は i 番目の質問の乗車駅と降車駅を示す。ただし、a ≠ b、ci ≠ di とする。

出力

質問ごとに、与えられた切符で移動できるなら Yes を、できないなら No を１行に出力する。

入力例

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

出力例

Yes
Yes
Yes
Yes
No
No
気温の差

選手の皆さん、パソコン甲子園にようこそ。イベントに参加するには体調管理が大切です。気温が大きく変動する季節の変わり目には体に負担がかかり、風邪をひきやすいと言われています。一番気を付けなければいけない日は、最高気温と最低気温の差が最も大きい日です。１日の最高気温と最低気温が７日分与えられたとき、それぞれの日について最高気温から最低気温を引いた値を出力するプログラムを作成してください。

入力

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

a1 b1
a2 b2
:
a7 b7

入力は7行からなり、i行目にはi日目の最高気温 ai(-40 ≤ ai ≤ 40)と最低気温 bi(-40 ≤ bi ≤ 40)を表す整数が与えられる。すべての日において、最高気温 ai は必ず最低気温 bi 以上となっている。

出力

7日分の気温の差を7行に出力する。

入力例

30 19
39 20
19 18
25 20
22 21
23 10
10 -10

出力例

11
19
1
5
1
13
20
チケットの売り上げ

今日は、アイヅ・エンターテインメント社イチオシのアイドルグループ「アカベコ＆コボウシ」のチケット発売日です。チケットには以下の４種類があります。

Ｓ席 6000円

Ａ席 4000円

Ｂ席 3000円

Ｃ席 2000円

販売責任者のあなたは、ドキドキしながら発売開始を待っています。いよいよ発売開始。売れ行き絶好調です！

発売開始からしばらく経ったところで、それまでの注文をまとめた表を受け取りました。表の各行には、それまでに売れたチケットの種類と枚数が書いてあります。ただし、チケットの種類がＳ，Ａ，Ｂ，Ｃの順に現れるとは限りません。この表の行ごとの売上金額を求めるプログラムを作成してください。

入力

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

t1 n1
t2 n2
t3 n3
t4 n4

入力は4行からなる。i行目には、チケットの種類を表す整数 ti (1 ≤ ti ≤ 4)と枚数を表す整数 ni (0 ≤ ni ≤ 10000)が与えられる。チケットの種類を表す整数1, 2, 3, 4は、それぞれＳ席、Ａ席、Ｂ席、Ｃ席を表す。t1, t2, t3, t4 の値として1から4までの数は必ず１度だけ現れるが、1, 2, 3, 4の順で与えられるとは限らない。

出力

行ごとに売上金額を出力する。

入力例 1

3 10
1 4
4 1
2 5

出力例 1

30000
24000
2000
20000

入力例 2

1 1
2 0
3 1
4 1

出力例 2

6000
0
3000
2000
入場料金

アイヅ温泉には、浴場とプールがあり、浴場を利用するには入浴券を、プールを利用するにはプール券をそれぞれ買う必要があります。これらの券の値段は、日によって変わるかもしれません。また、アイヅ温泉には以下のようなルールがあります。

券は購入当日１回の利用に限り有効。

「入浴券５枚以上かつプール券２枚以上」でまとめて買うと、すべての券が２割引になる。

温泉好きの貞吉さんとその友人たちは、アイヅ温泉に毎日のように通っています。彼らは皆気まぐれで、日によって使う枚数は異なります。アイヅ温泉には割引ルールがあるため、グループで協力して上手に買えば、合計料金を安く済ますことができるかもしれません。

入浴券とプール券の料金、使用する入浴券の枚数とプール券の枚数が入力として与えられたとき、最も安い合計料金を出力するプログラムを作成してください。ただし、使用する枚数より多く券を買うことで合計料金が安くなるなら、買った券すべてを使わなくともよいものとします。

入力

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

N
x1 y1 b1 p1
x2 y2 b2 p2
:
xN yN bN pN

１行目のN(1 ≤ N ≤ 365)は料金を計算したい日数である。続くN行に、i日目の入浴券の料金xi(100 ≤ xi ≤ 1000)、プール券の料金yi(100 ≤ yi ≤ 1000)、使用する入浴券の枚数bi(0 ≤ bi ≤ 6)、使用するプール券の枚数pi(0 ≤ pi ≤ 6)が与えられる。入浴券とプール券共に料金は50円刻みである。

出力

それぞれの日について最も安い合計料金を１行に出力する。

入力例 1

2
100 100 1 1
1000 500 5 2

出力例 1

200
4800

入力例 2

5
500 500 1 1
500 500 5 2
1000 100 0 6
1000 100 6 0
100 1000 0 0

出力例 2

1000
2800
600
4960
0
おそろいの景品

ジョウ君とヤエさんは仲の良いカップルです。ジョウ君はカプセル玩具自販機(ガチャポン)の景品を集めており、二人で出かけたときも、ガチャポンを見つけると何度かやってみるほどの熱の入りようです。ヤエさんは楽しそうなジョウ君をそばで見ているだけでしたが、ジョウ君の今度の誕生日プレゼントにガチャポンの景品をひとつあげることにしました。ヤエさんはガチャポン自体にはあまり興味がわきませんでしたが、できればジョウ君とおそろいの景品が欲しいと思っています。

ヤエさんがやってみようと思うガチャポンは、１回のチャレンジで景品がひとつ出ます。品切れのものも含め景品が何種類あるのかと、それぞれの景品がいくつ残っているのかはわかります。しかし、1回のチャレンジでどの景品が出るかはわかりません。そこで、景品が出る順番にかかわらず、ヤエさんが同じ景品を必ず２つ得るために最低限必要なチャレンジの回数を出力するプログラムを作成してください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ1つの行で示される。各データセットは以下の形式で与えられる。

N
k1 k2 ... kN

各データセットは2行であり、1行目に景品が何種類あるかを表す整数N(1 ≤ N ≤ 10000)が与えられる。続く1行に各景品がいくつ残っているのかを表す整数ki(0 ≤ ki ≤ 10000)が与えられる。

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

出力

データセットごとに、同じ景品を必ず２つ得るために最低限必要なチャレンジの回数を出力する。ただし、不可能な場合はNAと出力する。

入力例

2
3 2
3
0 1 1
1
1000
0

出力例

3
NA
2

１つ目のデータセットでは、運良く１種類目か２種類目の景品が連続で出て２回で済む可能性はあるが、同じ種類の景品を必ず２つ得るためには３回チャレンジする必要がある。

２つ目のデータセットでは、２つ以上残っている景品がもともと無いので不可能である。

３つ目のデータセットでは、景品は１種類だけなので２回のチャレンジでその景品が必ず２つ得られる。
坊主めくりの結末

百人一首の札を使った遊戯の１つに、「坊主めくり」というものがあります。絵札だけを使う簡単な遊戯なので広く楽しまれています。きまりには様々な派生型がありますが、ここで考える坊主めくりはN人の参加者で、以下のようなルールで行います。

６４枚の「男」、１５枚の「坊主」、２１枚の「姫」、計１００枚の札を使う。

絵が見えないように札を裏がえしにしてよく混ぜ、「札山」をつくる。

参加者の一人目から順番に１枚ずつ札山の札を引く。N人目の次は、また一人目から繰り返す。

引いた札が男なら、引いた人はその札を手に入れる。

引いた札が坊主なら、引いた人はその札を含め、持っている札をすべて「場」に出す。

引いた札が姫なら、引いた人はその札を含め、場にある札をすべて手に入れる。

札山の札がなくなったら終了で、一番多くの札を持っている人の勝ち。

参加者数と札山に積まれた札の順番が与えられたとき、遊戯が終了した時点で各参加者が持っている札数を昇順で並べたものと、場に残っている札数を出力するプログラムを作成してください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ一つの行で示される。各データセットは以下の形式で与えられる。

N
c1c2 ... c100

各データセットは2行であり、1行目に参加者数を表す整数N(2 ≤ N ≤ 10)が与えられる。続く1行に札山に積まれた札の並びを表す文字列が与えられる。文字ciはi番目に引かれる札を表しており、Mが男、Sが坊主、Lが姫の札を表す。各文字の間に空白は無い。

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

出力

データセットごとに、遊戯が終了した時点での札数の並びを１行に出力する。札数の並びとして、各参加者が持っている札の枚数を昇順に並べだものの後に、場に残っている札の枚数を出力する。各札数の間は空白１つで区切る。行の終わりには空白を出力しない。

入力例

2
SSSSSSSSSSSSSSSLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
2
SSSSSSSSSSSSSSLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMSL
5
MMMMMMSLSLLMMMSMMSLMMMLMMMMLSLLLLMLSMMLMMLLMSSSLMMMMLMLSMLMSMMMMMMMSMMMMMMLMMMMMSMMMLMMLMMMMMMMMMSSM
0

出力例

42 58 0
0 100 0
0 0 3 10 59 28
陣形

プログラマー養成校であるアカベ高校では、チーム戦の競技プログラマーの役割を以下の３タイプに分けています。

Ｃ：
コーダー
言語を熟知しており、コーディングを行う。

Ａ：
アルゴリズマー
論理的思考が得意であり、アルゴリズムを考える。

Ｎ：
ナビゲーター
読解力に長けており、問題の分析・デバッグをする。

この高校では以下のいずれかの陣形で３人一組のチームを構成しています。

ＣＣＡ：
バランスがとれている安定型

ＣＣＣ：
スピードを見込めるがリスクの高い速攻型

ＣＡＮ：
正確に問題を解く慎重型

競技プログラミング部のコーチであるあなたは、これらの部員をうまく組み合わせ、できるだけ多くのチームを結成できるよう、毎年気を配っています。そこで、コーダーの人数、アルゴリズマーの人数、ナビゲーターの人数が入力として与えられたとき、最大何チーム作れるかを出力するプログラムを作成してください。

入力

入力は1つのデータセットからなる。入力データは以下の形式で与えられる。

Q
c1 a1 n1
c2 a2 n2
:
cQ aQ nQ

1行目のQ(0 ≤ Q ≤ 100)はチーム数を求めたい年数である。続くQ行に各年の役割別の人数が与えられる。各行にはコーダーの人数ci(0 ≤ ci ≤ 1000)、アルゴリズマーの人数ai(0 ≤ ai ≤ 1000)、ナビゲーターの人数ni(0 ≤ ni ≤ 1000)が与えられる。

出力

年ごとに、作成できる最大のチーム数を1行に出力する。

入力例

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

出力例

1
1
4
0
プログラミングコンテスト

白虎大学では毎年プログラミングコンテストが開催されています。チームの総数をNとしたとき、チームには1からNのチームIDがそれぞれ割り当てられています。コンテストは全てのチームの得点が0の状態から開始し、L秒間連続して行われます。

今年のコンテストは、テレビで中継されることになりました。コンテストの間テレビに映るのは、その時点で最も得点の高いチームだけです。ただし、該当するチームが複数いるときは、その中でチームIDの一番小さいチームが映ります。映すべきチームが変わると、瞬時にカメラが切り替わります。

あなたはコンテストのログを入手しました。ログには、あるチームの得点が変化した時のレコードがすべて含まれています。各レコードは「チームdがコンテスト開始t秒後の時点でx点獲得した」という形式で与えられています。なお、減点される場合もあるので、現在の得点が0より小さくなることもあります。

コンテストのログを入力とし、コンテスト開始から終了までの間にテレビに映った時間が最も長いチームのIDを報告するプログラムを作成してください。

入力

入力は1つのデータセットからなる。入力は以下の形式で与えられる。

N R L
d1 t1 x1
d2 t2 x2
:
dR tR xR

１行目は３つの整数からなる。N(2 ≤ N ≤ 100000)はチーム数、R(0 ≤ R ≤ 1000000)はログに含まれるレコードの数である。L(1 ≤ L ≤ 1000000)はコンテストの時間（長さ）を表す。続くR行に各レコードの情報が与えられる。各レコードはチームdi(1 ≤ di ≤ N)がコンテスト開始ti(0 < ti < L)秒後の時点でxi(-1000 ≤ xi ≤ 1000)点獲得あるいは減点されたことを示す。ただし、ti, xiは整数であり、ti-1 ≤ tiである。

出力

コンテスト開始から終了までの間にテレビに映った時間が最も長いチームのIDを１行に出力する。ただし、最も長いチームが複数あるときは、その中でチームIDの一番小さいチームを出力する。

入力例 1

3 4 600
3 100 5
1 200 10
2 400 20
3 500 20

出力例 1

1

入力例 2

3 5 600
3 100 5
1 200 10
2 300 30
1 400 -8
2 400 -27

出力例 2

3
勉強会

プログラマー養成校のアカベ高校には、生徒自身で運営するユニークな勉強会があります。プログラマーは新しい技術を常に取り入れることが大切なので、この勉強会を通して自学自習の習慣を身につけることがこの活動のねらいです。

生徒は全部でN人おり、それぞれが入学時のプログラミングコンテストの結果で得られたスコアを持っています。勉強会ではN人の生徒のうち何人かがリーダーになり、各リーダーがそれぞれのグループを運営するとともに、自らの運営するグループに参加します。

リーダー以外の生徒は、自分のスコアよりも低いスコアのリーダーが運営するグループには参加できません。また、0以上のある値rを１つ決め、グループに参加する生徒とリーダーのスコアの差がr以内となるようにしています。つまり、グループのリーダーのスコアがsのとき、自分のスコアがsを超えているか、あるいは s - r 未満ならば、そのグループには参加できません。

あなたは勉強会の実行委員長であり、運営準備のためにシミュレーションを行うことにしました。シミュレーションでは、リーダーが誰もいない状態から始め、以下の操作を何回か繰り返します。

生徒をリーダーに加える。

生徒をリーダーから外す。

要求時点でのリーダーの組み合わせについて、どのグループにも参加できない生徒がx人以下になるような、最小のrを求める。

このようなシミュレーションを行うプログラムを作成してください。

入力

入力は1つのデータセットからなる。入力は以下の形式で与えられる。

N Q
s1
s2
:
sN
QUERY1
QUERY2
:
QUERYQ

1行目に生徒の数N(1 ≤ N ≤ 1000000)、処理要求の数Q(0 ≤ Q ≤ 1000)が与えられる。

続くN行にi番目の生徒のスコアを示す整数si(0 ≤ si ≤ 1,000,000,000)が与えられる。生徒は1,2,...,N で番号付けされているものとする。

続くQ行に処理要求QUERYiが与えられる。処理要求は時系列順に与えられる。処理要求はADD, REMOVE, CHECKの3種類あり、各QUERYiは以下のいずれかの形式で与えられる。

ADD a

または

REMOVE a

または

CHECK x

ADD aは番号a(1 ≤ a ≤ N)の生徒をリーダーに加えることを表す。

REMOVE aは番号a(1 ≤ a ≤ N)の生徒をリーダーから外すことを表す。

CHECK xは出力要求を表す。どのグループにも参加できない生徒の数の上限x(0 ≤ x ≤ N)が与えられる。

なお、入力は以下の条件を満たすものとする。

どの時点でも、リーダーの人数が100人を超えることはない。

その時点でリーダーである生徒をリーダーに加えることはない。

その時点でリーダーでない生徒をリーダーから外すことはない。

出力

時系列順に各出力要求の時点で、どのグループにも参加できない生徒がx人以下になるような最小のrを1行に出力する。ただし、どのようなrを選んでもx人以下にすることが不可能であればNAと出力する。

入力例 1

5 8
5
10
8
7
3
ADD 1
ADD 3
CHECK 0
CHECK 1
CHECK 2
CHECK 3
CHECK 4
CHECK 5

出力例 1

NA
2
1
0
0
0

入力例 2

5 28
5
10
8
7
3
CHECK 0
CHECK 1
CHECK 2
CHECK 3
CHECK 4
CHECK 5
ADD 1
CHECK 0
CHECK 1
CHECK 2
CHECK 3
CHECK 4
CHECK 5
REMOVE 1
ADD 3
CHECK 0
CHECK 1
CHECK 2
CHECK 3
CHECK 4
CHECK 5
ADD 1
CHECK 0
CHECK 1
CHECK 2
CHECK 3
CHECK 4
CHECK 5

出力例 2

NA
NA
NA
NA
NA
0
NA
NA
NA
2
0
0
NA
5
3
1
0
0
NA
2
1
0
0
0
ハッピーエンド問題

「ハッピーエンド問題」と呼ばれる数学の未解決問題に関連したプログラムを書いてみましょう。平面上に与えられたN個の点から、ちょうどk個の点を結んでできる凸多角形のうち、最も面積の小さいものを見つけるプログラムを作成してください。ただし、N個の点の座標を与えられた後、質問として凸多角形の角の個数kがいくつか与えられます。

（補足：ハッピーエンド問題について）

平面上にどの３点も同じ直線上に乗らないようにN個の点を置きます。そのとき、どのように点を置いても、k個の点をうまく選ぶとk個の角をもつ凸多角形が必ず作れると予想されています。 今のところ、三角形ならばN=3、四角形ならばN=5、五角形ならばN=9、六角形ならばN=17であればよいことが、２００６年までに証明されています。また、三角形以上のすべてのk角形に対して、N=1+2k-2という予想がありますが、いまだ証明されていません。これは１００年にわたり研究が進められている難問です。

この問題には、「ハッピーエンド問題」という素敵な名前がつけられています。ある男女がこの問題を研究しているうちに仲良くなって、ついに結婚したことにちなんで、友人の数学者が名付けたそうです。ロマンチックですね。

入力

入力は1つのデータセットからなる。入力データは以下の形式で与えられる。

N
x1 y1
:
xN yN
Q
k1
:
kQ

１行目に平面上の点の個数N(3 ≤ N ≤ 40)が与えられる。続くN行に各点の座標が与えられる。各点には1からNまでの番号が、入力される順番に付けられている。xiとyi(-10000 ≤ xi, yi ≤ 10000)はi番目の点のそれぞれx座標とy座標を表す整数である。x軸の正方向は右向き, y軸の正方向は上向きに取るものとする。

続く１行に質問の数Q(1 ≤ Q ≤ N)が与えられる。続くQ行に質問が与えられる。ki(3 ≤ ki ≤ N)はi番目の質問である凸多角形の角の個数を表す。

なお、入力は以下の条件を満たすものとする。

入力される点の座標はすべて異なる。

どの３点も同じ直線上には乗らない。

各質問に対して面積最小の凸多角形は１つであり、２番目に小さい凸多角形との面積の差は 0.0001以上。

出力

質問ごとに、面積が最小の凸多角形の全頂点を1行に出力する。凸多角形の頂点で最も下にあるものの中で最も左にある頂点から順に、反時計周りで頂点の番号を出力する。頂点の番号の間は空白1つで区切る。行の終わりには空白文字を出力しない。ただし、凸多角形が作れない場合はNAと出力する。

入力例 1

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

出力例 1

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

入力例 2

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

出力例 2

6 3 5
6 3 4 5
1 2 6 4 5
NA
テニス

ジョウ君とヤエさんは昼休みにテニスをします。ただし、昼休みは時間が限られているので、短い時間で終わるように、得点について以下の３つのルールで行います。

相手が３点以下のときに先に５点とれば勝ち。

４対４の同点になったときは、その直後に連続して２点とった方が勝ち。

４対４の後に双方が１点ずつとったときは引き分け。

以下の図は、ジョウ君とヤエさんの試合で起こり得るすべての状況を表しています。丸の中の左の数がジョウ君の得点、右がヤエさんの得点です。Ａと書いた矢印はジョウ君が１点とったことを、Ｂと書いた矢印はヤエさんが１点とったことを表します。

ジョウ君とヤエさんの得点が与えられたとき、試合開始からその得点状況になるまでに、上の図で通り得るすべての経路を列挙するプログラムを作成してください。

入力

入力は１つのデータセットからなる。入力データは以下の形式で与えられる。

j y

j (0 ≤ j ≤ 6) がジョウ君の得点、y (0 ≤ y ≤ 6) がヤエさんの得点である。ただし、j と y がともに 0 であることはない。また、j が 6 のときは y は 4、y が 6 のときは j は 4 である。

出力

上の図で、試合開始（0-0と書かれた丸）から与えられた得点が書かれた丸までのすべての経路を出力する。経路は図の矢印に添えられた英字(A,B)の列で表し、辞書式順序（英和辞書で単語が並んでいる順番）になるように並べる。１つの経路を１行に出力する。経路の前後には空白を出力しない。

入出力例

入力例1

2 2

出力例1

AABB
ABAB
ABBA
BAAB
BABA
BBAA

入力例2

5 1

出力例2

AAAABA
AAABAA
AABAAA
ABAAAA
BAAAAA
親方の給料計算

ワシはパイプつなぎ組合の親方じゃ。職人を工事現場に派遣し、現場でパイプをつながせておる。去年は工事が増えて大儲けするかと思ったのじゃが、ちょっと給料の出し方がまずくてのぅ。ウチとしては大赤字になってしまったのじゃよ…。そこで、今年は職人たちへの給料の出し方を工夫したいのじゃ。

職人たちの給料は、工事の種類とこなした回数で決めておる。つまり、

職人の給料 ＝ 種類 1 の単価 × 種類 1 をこなした回数

+ 種類 2 の単価 × 種類 2 をこなした回数

....

+ 種類 M の単価 × 種類 M をこなした回数

となるのじゃ。これを計算するために、ウチでは、どの職人がどの種類の工事を何回こなしたかを次のような表に記録しておる。

例えば、上の表では、職人１が工事２を２回、工事４を１回こなしたことを示しておる。

職人たちがこなした仕事の回数はもう変えられんが、やつらは工事の単価を知らんので、単価をいろいろと変えながら皆の不満が出ぬよう給料を調整しようと思うておる。じゃが、ワシがこしらえたプログラムが今もって動かなくてのぅ。ちょっとみてくれんかね。

//省略
int i, j;
for ( i = 0; i < N; i++ ){
c[i] = 0;
for ( j = 0; j < M; j++ ){
c[i] = c[i] + a[i][j]*b[j];
}
}
//省略

N は職人の数で M は工事の種類の数じゃ。変数 a[i][j] に職人iが工事 j をこなした回数を、b[j] に工事 j の単価をいれて、c[i] に職人 i の給料を格納しておる。合っているはずなのに、うんともすんとも言わん！そろそろ今年の給料を職人たちに払わないとまずいのじゃが・・・・・なんとかならんかのぅ。

それでは、職人のこなした仕事の回数と各工事の単価の情報が与えられたとき、各職人の給料を計算するプログラムを作成してください。

入力

入力は1つのデータセットからなる。入力データは以下の形式で与えられる。

N M
s1 t1 e1
s2 t2 e2
:
0 0 0
L
b11 b12 ... b1M
b21 b22 ... b2M
:
bL1 bL2 ... bLM

1行目は職人の数 N(1 ≤ N ≤ 10000)と工事の種類の数 M(1 ≤ M ≤ 10000)。

続いて、工事の記録として、職人の番号 si (1 ≤ si ≤ N) と工事の種類の番号 ti(1 ≤ ti ≤ M)、および職人 si が工事 ti をこなした回数 ei (1 ≤ ei ≤ 50000) からなる行が１行以上与えられる。工事の記録はゼロ３つの行で終わる。ただし、ei の合計は 1 以上 50000 以下である。また、工事の記録には、どの職人と工事の種類の組も２度以上現れない。工事をこなした回数が 0 である職人と工事の種類の組は与えられない。

続く 1 行は給料の算出を行う回数 L (1 ≤ L ≤ 100) 。

続く L 行は、i 回目の給料の算出に必要な、工事 j の単価 bij (0 ≤ bij ≤ 10000) の並び。

出力

以下の形式で、i 回目の給料の算出によって得られた職人 j の給料 cij を順番に出力する。各給料の間は空白１つで区切る。

c11 c12 ... c1N
c21 c22 ... c2N
:
cL1 cL2 ... cLN

入出力例

入力例

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

出力例

3 16 5 116
5 17 30 38
1 17 25 16
塵劫記

大きな数を表そうとすると、文字数も多くなるし、位取りがわからなくなってしまうので、なかなか面倒です。大きな数をわかりやすく表すために、人々は数の単位を使ってきました。江戸時代に書かれた「塵劫記」という本の中では、数の単位が次のように書かれています。

たとえば、２の１００乗のようなとても大きな数は、１２６穣７６５０(じょ)６００２垓２８２２京９４０１兆４９６７億３２０万５３７６と表せます。それでは、正の整数 m と n が与えられたとき、m の n 乗を塵劫記の単位を使って上のように表すプログラムを作成してください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ２つの行で示される。各データセットは以下の形式で与えられる。

m n

m (2 ≤ m ≤ 20) が基数、n (1 ≤ n < 240) が指数を表す。ただし、mnは 1072 未満である。

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

出力

データセットごとに、mn を塵劫記の単位で表した文字列を1行に出力する。ただし、各単位は以下の表記で出力する。

mnを表す文字列は、1 から 9999 までの数と上の表に現れる単位を表す文字列からなる。文字列には、余分な 0 や単位を含めない。

入出力例

入力例

2 10
5 20
10 8
20 17
0 0

出力例

1024
95Cho3674Oku3164Man625
1Oku
131Gai720Kei
巨樹の刻み手

あなたは N 種類の道具を使って、目の前の巨樹を切り倒そうとしています。はじめは、樹の耐久力は D、あなたの経験値は 0 ですが、道具 i で１回樹を叩くと樹の耐久力は ai 減り、あなたは ei の経験値を得ます。ただし、道具 i を使うためには、あなたは ri 以上の経験値を持っていなければなりません。樹の耐久力が 0 以下になると樹は倒れます。

樹の耐久力と道具についての情報が与えられたとき、樹を切り倒すには最低何回樹を叩かなければいけないかを求めるプログラムを作成してください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ２つの行で示される。各データセットは以下の形式で与えられる。

D N
a1 e1 r1
a2 e2 r2
:
aN eN rN

1 行目に樹の耐久力を表す整数 D (1 ≤ D ≤ 100) と道具の種類の数 N(1 ≤ N ≤ 100) が与えられる。続く N 行に道具 1 から N までの情報が与えられる。ai (0 ≤ ai ≤ 100) と ei (0 ≤ ei ≤ 100) は、道具iを１回使うことで減る樹の耐久力とあなたが得ることのできる経験値をそれぞれ表す。ri (0 ≤ ri ≤ 100) は道具を使うために必要な経験値を表す。ai, ei, ri はすべて整数である。

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

出力

樹を切り倒すのに必要な、樹を叩く最小の回数を１行に出力する。ただし、樹を切り倒すことが不可能な場合は NA と出力する。

入出力例

入力例

15 4
1 1 0
1 2 2
5 10 5
8 1 15
60 4
5 2 0
8 8 2
3 5 0
49 0 18
100 1
1 1 1
0 0

出力例

6
4
NA
無限急行

ムゲン鉄道のムゲン線には無限個の駅があります。駅には …, -3, -2, -1, 0, 1, 2, 3, … と番号が振られていて、各駅は数直線上の整数と同じ順番で隣り合っています。あなたはいま、ある番号の駅から電車に乗り、それより大きな番号の駅に向かおうとしています。

ムゲン線には無限種類の快速電車が走っています。それらは 0 級快速、1 級快速、2 級快速、3 級快速、… のように番号で呼ばれています。n 級快速の電車は、2n の倍数の番号の駅に停車します。たとえば、1級快速は駅 …, -4, -2, 0, 2, 4, … に、3 級快速は駅 …, -24, -16, -8, 0, 8, 16, 24, … に停車するといった具合です。0 級快速はすべての駅に停車するので、本当は各駅停車ですがムゲン鉄道は「快速」と呼んでいます。

どの級の快速電車も、ある停車駅から次の停車駅まで移動するのに1単位時間かかります。また、快速電車間の乗り換えにかかる時間は無視できるものとします。乗車駅 s と降車駅 d が与えられたとき、s から d へ移動するのに必要な最小の時間を求めるプログラムを作成してください。ただし、s から d へ移動する間に、大きな番号から小さな番号の駅に向かっての移動は認められないものとします。

入力

入力は1つのデータセットからなる。入力データは以下の形式で与えられる。

N
s1 d1
s2 d2
:
sN dN

１行目に移動の回数を表す N (1 ≤ N ≤ 100) が与えられる。続く N 行に、乗車駅の番号 si と降車駅の番号 di (-1,000,000,000 ≤ si < di ≤ 1,000,000,000) が与えられる。

出力

与えられた乗車駅と降車駅ごとに、移動に必要な最小の時間を１行に出力する。

入出力例

入力例

3
0 7
-1048576 0
-3 5

出力例

3
1
4
微生物発電

飯沼博士は磐梯山の噴気孔でふしぎな微生物を見つけました。この微生物の雄と雌１体ずつが合体すると、電気エネルギーを放出します。この微生物を研究すれば、将来のエネルギー危機から我々を救えるかもしれません。

観察を続けると、微生物は合体したときだけ電気エネルギーを発生させることと、合体した微生物のさらなる合体はないことがわかりました。さらに観察を続けると、合体で放出される電気エネルギーは、微生物が体内に持つ未知の粒子（博士はこれを磐梯山にちなんでＢ粒子と名づけました）の量で決まることがわかりました。合体する雄と雌が体内に持つＢ粒子の量をそれぞれ bm と bw とすると、合体により放出される電気エネルギーは |bm - bw| × (|bm - bw| - 30)2 という式で計算できます。

この発見により、微生物の集団から得られる最大の電気エネルギーが計算できるようになりました。それでは、微生物の集団に含まれる雄と雌の数と、各個体が持つＢ粒子の量が与えられたとき、この微生物の集団から得られる最大の電気エネルギーを計算するプログラムを作成してください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ2つの行で示される。入力データは以下の形式で与えられる。

M W
bm1 bm2 ... bmM
bw1 bw2 ... bwW

１行目の M と W (1 ≤ M,W ≤ 12) はそれぞれ雄と雌の微生物の数である。２行目に、i 番目の雄が体内に持つＢ粒子の量 bmi (0 ≤ bmi ≤ 50) が与えられる。３行目に、i 番目の雌が体内に持つＢ粒子の量 bwi (0 ≤ bwi ≤ 50) が与えられる。

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

出力

データセットごとに、微生物の集団から得られる電気エネルギーの最大値を1行に出力する。

入出力例

入力例

3 3
0 20 30
10 20 30
10 10
32 10 15 8 20 10 6 45 50 41
18 0 37 25 45 11 25 21 32 27
7 3
23 14 39 6 47 16 23
19 37 8
0 0

出力例

12000
53906
11629
古代遺跡の謎

古代遺跡から超大型あみだくじが発見された。学者達はこれをVLA(Very Long Amidakuji)と命名した。分析の結果、VLAは N 本の縦棒を持ついくつかの部品の組み合わせで構成され、多くの場合繰り返しを含んでいることがわかった。例えば、図のVLAは２種類の部品AとBを使った４つの部品から構成されている。

このVLAの上端に左から順番に 1,2,3,4,5 と番号をつけ、それぞれの番号からVLAをたどり（あみだくじのたどり方については問題文最後の補足を参照してください)、下端にたどり着いた場所の縦棒にその番号を振る。すべての番号についてたどり終えた後で、下端に振られた番号を左から読むと 4,2,5,1,3 になる。このように、1,2,3,4,5 という番号の列が 4,2,5,1,3 という列に変換される。

彼らはVLAによって 1 から N までの番号の列がどのように変換されるのかを知りたいが、手作業でたどるのは大変そうだ。そこでパソコン甲子園出場者である優秀なプログラマーの君たちに、VLAのシミュレーションを依頼した。

VLAはとても長いため、そのままの状態ではプログラマーたちに情報を伝えることができない。そこで学者たちは、部品の種類を英大文字１つで表し、VLAを式で表現することにした。

部品は同じ位置関係である縦棒が一致するように、左から順番に + 演算子で接続される。たとえば、上からA,B,C,D という順番で連結された部品の列は A+B+C+D という式で表記される。

部品の列を表す式 seq の m 回の繰り返しは、m(seq) と表記できる。たとえば、A+B の2回の繰り返しは 2(A+B) と表せ、これは A+B+A+B と同じである。また、seq が１つの部品 a の場合は、a を囲むかっこを省略しても構わない。4(A+B) と 3(X+Y) を、この順番で連結したVLAは 4(A+B)+3(X+Y) と表せる。また、かっこは 2(4(A+B)+3(X+Y))+10C のように入れ子にしても構わない。

それでは、縦棒の数 N、各部品の情報、複数のVLAの式を入力とし、各式が表すVLAによって1から N までの番号の列がどのように変換されるかを出力するプログラムを作成しなさい。

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

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

入力

入力は１つのデータセットからなる。入力データは以下の形式で与えられる。

N K
p1 h1
g1(1,1) g1(1,2) .. g1(1,N-1)
g1(2,1) g1(2,2) .. g1(2,N-1)
:
g1(h1-1,1) g1(h1-1,2) .. g1(h1-1,N-1)
p2 h2
g2(1,1) g2(1,2) .. g2(1,N-1)
g2(2,1) g2(2,2) .. g2(2,N-1)
:
g2(h2-1,1) g2(h2-1,2) .. g2(h2-1,N-1)
:
pK hK
gK(1,1) gK(1,2) .. gK(1,N-1)
gK(2,1) gK(2,2) .. gK(2,N-1)
:
gK(hK-1,1) gK(hK-1,2) .. gK(hK-1,N-1)
E
expression1
expression2
:
expressionE

1行目に縦棒の数を表す整数 N (2 ≤ N ≤ 12) と部品の種類の数 K (1 ≤ K ≤ 26)が与えられる。

2行目以降に K 種類の部品の情報が与えられる。各部品は以下の形式で与えられる。

最初の行は部品名を表す１つの英大文字 pi と部品 i の縦棒の長さを表す整数 hi (1 ≤ hi ≤ 20)を含む。

続くhi-1 行で部品 i の横棒の情報が与えられる。gi(r, c) は部品 i の上端から長さ r の位置において、左から c 番目の縦棒と c+1 番目の縦棒をつなぐ横棒の有無を表す。横棒があるときは gi(r, c) = 1、横棒がないときは gi(r, c) = 0である。

続く１行に式の数 E (1 ≤ E ≤ 100) が与えられる。続く E 行にVLAの式を表す文字列 expressioni（1文字以上1000文字以下）が与えられる。

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

異なる部品に同じ名前が使われることはない。

各部品 i について、gi(r, c)と gi(r, c+1)が同時に 1 となることはない。

式に含まれる整数は 1 以上 1,000,000,000 以下である。

式には空白は含まれない。

出力

式ごとに、VLAによる1からNまでの列の変換結果を１行に出力する。それぞれの数字の間は空白1つで区切る。

入出力例

入力例

5 2
A 5
1 0 0 1
0 1 0 0
1 0 1 0
0 1 0 1
B 4
1 0 0 1
0 1 0 0
0 0 1 0
2
2(A+B)
1000000000(1000000000A+1000000000B)

出力例

4 2 5 1 3
1 2 3 4 5
壁

２XXX年、突然出現した天敵の侵入を防ぐために、人類は壁を作りその中に逃げ込んだ。その結果、人類の活動領域はその壁で囲まれた範囲に限定されてしまった。この領域は、上空から見ると W × H の長方形である。領域内部には x 軸あるいは y 軸に対して平行な壁がいくつか設置されている。活動領域の例を下図に示す。

人類は活動領域内を自由に移動することができるが、壁を越えるためには一定量の資源を消費しなければならない。ただし、壁を越えることはできるが（図中の (1)）、壁の交点を越えること (2)、壁や活動領域の境界の上を移動すること (3)、活動領域外に出ること (4) はできない。

領域内部の壁の情報といくつかの始点と終点の組を入力し、始点から終点へ移動するために越えなければならない壁の数の最小値を計算するプログラムを作成しなさい。ただし、壁は幅のない線分とします。

入力

入力は１つのデータセットからなる。入力データは以下の形式で与えられる。

W H M
px1 py1 qx1 qy1
px2 py2 qx2 qy2
:
pxM pyM qxM qyM
Q
sx1 sy1 gx1 gy1
sx2 sy2 gx2 gy2
:
sxQ syQ gxQ gyQ

1行目に領域の横の長さと縦の長さを表す整数 W, H (2 ≤ W,H ≤ 1,000,000,000) と壁の数 M (0 ≤ M ≤ 100) が与えられる。

続く M 行に壁を表す線分の情報が与えられる。各行に与えられる４つの整数 pxi, pyi, qxi, qyi (0 ≤ pxi, qxi ≤ W, 0 ≤ pyi, qyi ≤ H) はそれぞれ i 番目の線分の端点の x 座標、y 座標、もうひとつの端点の x 座標、y 座標を表す。

続く1行に質問の数 Q (1 ≤ Q ≤ 100) が与えられる。続く Q 行に各質問が与えられる。各質問に含まれる４つの整数 sxi, syi, gxi, gyi (0 < sxi, gxi < W, 0 < syi, gyi < H) はそれぞれ始点の x 座標、y 座標、終点の x 座標、y 座標を表す。

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

各線分は x 軸あるいは y 軸に対して平行であり、長さは1以上である。

２つの互いに平行な線分が同じ点あるいは線分を共有することはない。

スタート地点、ゴール地点は壁上にあることはない。

どの線分も活動領域の境界と線分を共有することはない。

出力

質問ごとに、壁を越える回数の最小値を出力する。

入出力例

入力例 1

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

出力例 1

3
1

入力例 2

4 4 0
1
1 1 2 2

出力例 2

0

入力例 3

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

出力例 3

0
0
1
アルゴリズム検定試験

あなたはイズア地区におけるアルゴリズム検定試験を運営しており、運営費を最小にしたいと考えています。運営費は、会場使用料、バスの使用料、移動補助金の総和です。

今年は N 人の受験者登録があり、それぞれ ci 人まで受け入れ可能な M 個の会場を確保しました。あなたは各受験者を必ずどこかの会場に割り当てなければなりません。1 人以上割り当てた会場については、人数にかかわらず fi 円の会場使用料を支払う必要があります。

イズア地区は図に示すように東西方向と南北方向に 1 km 間隔で道が走っており、受験者の家と会場は交差点上にあると考えます。各受験者は家から会場まで道に沿って徒歩で移動できます。また、この検定試験では、1 人以上受験者を受け入れる各会場につき 1 台のシャトルバスが運行されるので、受験者はバスを利用することもできます。ただし、自分が受験する会場行きのバスにしか乗れません。

各シャトルバスは、会場からの東西方向の距離と南北方向の距離の和が D 以内のすべての交差点に停車します（図は D = 3 の場合）。バスの使用料は D に比例し、D が 1 km 増えると B 円上がります。つまり、シャトルバスを運行するには 1 会場あたり D × B 円の費用を支払う必要があります。なお、D 及び B はすべての会場で共通の値を用います。

移動補助金とは、各受験者に必要な最低限の徒歩での移動に対して運営者が受験者に支払う費用で、1 km について 1 円を払う必要があります。

あなたは受験者の家と会場の位置、会場の受け入れ可能人数と使用料、D が 1 km 増えたときに加算される料金 B の情報を入力データとして持っており、各受験者への会場割り当てと D を決定することができます（ただし、D は 0 以上の整数)。このとき、運営費の最小値を求めてください。

入力

入力は複数のデータセットからなる。入力の終わりはゼロ３つの行で示される。各データセットは以下の形式で与えられる。

N M B
ax1 ay1
ax2 ay2
:
axN ayN
bx1 by1 c1 f1
bx2 by2 c2 f2
:
bxM byM cM fM

1 行目は３つの整数からなる。N (1 ≤ N ≤ 100) は受験者の人数、M (1 ≤ M ≤ 5) は会場数である。B (0 ≤ B ≤ 1000) はシャトルバスを運行する際に、Dが 1 km 増えたときに加算される料金である。続く N 行に各受験者の家の座標が与えられる。axi, ayi (-1000 ≤ axi, ayi ≤ 1000) はそれぞれ受験者 i の家の x 座標と y 座標を示す。続く M 行に各会場の情報が与えられる。bxi, byi (-1000 ≤ bxi, byi ≤ 1000) はそれぞれ会場 i の x 座標と y 座標を示す。ci(1 ≤ ci ≤ 100) は会場 i の受け入れ可能人数、fi (0 ≤ fi ≤ 100000) は会場 i の使用料を示す。ただし、c1 からcM までの合計は N 以上である。

入力は以下の条件を満たすと考えてよい。

使用する会場を決めたとき、D = i におけるそれらの会場への受験者の割り当て方のうち移動補助金が最小となるときの金額を F(i) とする。このとき、F(i+2) - F(i+1) ≥ F(i+1)-F(i) が成立する。

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

出力

データセットごとに試験の運営費の最小値を 1 行に出力する。

入出力例

入力例

1 1 1
0 0
0 0 1 0
1 1 0
0 0
-3 0 2 3
1 3 1
0 0
-3 0 2 3
0 -5 2 0
4 0 2 1
4 3 1
0 0
0 0
0 0
0 0
-3 0 2 3
0 -5 2 0
4 0 2 1
6 3 1
0 0
0 0
0 0
0 0
0 0
0 0
-3 0 2 3
0 -5 2 0
4 0 2 1
6 3 2
0 0
0 0
0 0
0 0
0 0
0 0
-3 0 2 3
0 -5 2 0
4 0 2 1
10 5 1
0 0
2 0
4 0
8 0
100 0
100 0
100 0
100 0
100 0
100 0
-3 0 1 0
1 0 1 0
3 0 2 0
15 0 1 0
105 0 6 0
10 5 2
0 0
2 0
4 0
8 0
100 0
100 0
100 0
100 0
100 0
100 0
-3 0 1 0
1 0 1 0
3 0 2 0
15 0 1 0
105 0 6 0
0 0 0

出力例

0
3
5
11
18
28
20
38
アカ・ベコ捕獲作戦

怪盗アカ・ベコは大胆にも、ツルガジョーから銀のシャチホコを盗み去った。警部であるあなたは、アカ・ベコが仲間のコボウ氏にシャチホコを渡すらしいという情報を手に入れた。ただ、コボウ氏はアカ・ベコのアジトまで出向けないので、アジトの外で渡すらしい。あなたはアカ・ベコを待ち伏せして捕まえることにした。この町は古い城下町なので、道が複雑に入り組んでいて、どの道も一方通行になっている。アカ・ベコがアジトから受け渡し場所までどの経路を通るのかはわからないが、人員不足のため、待ち伏せ場所は１つに設定しなければならない。

あなたは、アジトを含むいくつかの地点を選び、それらをつなぐ道を調べ、地図を作った。地図上の地点のどこかで受け渡しが行われるらしい。受け渡し場所が判明次第、以下のように待ち伏せ場所を選ぶ。

アジトは危険なのでアジト以外の地点。

アカ・ベコがアジトから受け渡し場所までどのような経路を通っても必ず通る地点。

1, 2 の両方を満たす地点のうち、受け渡し場所にたどり着くまでに通過しなければならない地点の数がより少ない地点。ただし、コボウ氏に見つからないようにするために、1, 2 を満たす地点が他にない場合のみ、受け渡し場所を待ち伏せ場所にする。

アジトと待ち伏せ場所の候補からなる地点をつなぐ道の情報のあとに、質問として受け渡し場所が複数入力されたとき、それぞれの受け渡し場所について待ち伏せ場所を出力するプログラムを作成してください。

入力

入力は１つのデータセットからなる。入力データは以下の形式で与えられる。

N M
s1 t1
:
sM tM
Q
r1
:
rQ

１行目は２つの整数からなる。N (3 ≤ N ≤ 100000) は地点の数、M(N-1 ≤ M ≤ 300000) は地図に書いたすべての道の数を表す。続く M 行に隣り合った地点の間を直接つなぐ道が与えられる。si と ti (1 ≤ si ≠ ti ≤ N) は i 番目の道のそれぞれ始点、終点となる地点の番号を表す。ただし、アジトの番号は1とし、アジトからはすべての地点へ到達できる。

続く１行に質問の数 Q(1 ≤ Q < N ) が与えられる。続く Q 行に質問が与えられる。i 番目の質問として、受け渡し場所の番号 ri (2 ≤ ri ≤ N) が与えられる。

出力

質問ごとに、待ち伏せ場所の番号を１行に出力する。

入出力例

入力例 1

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

出力例 1

2
3
4
4
5

入力例 2

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

出力例 2

6
2
4
6
9
3
2
11
4
7