alexjercan/bugnet huggingface dataset:
ガソリンスタンド

白虎サービスエリアのガソリンスタンドには、$1$から$N$の番号が割り当てられた$N$個のレーンがあります。各レーンの先頭の車が給油を行うことができます。

ガソリンスタンドに入場した車は、並んでいる車が最も少ないレーンを選び列の末尾に並びます。そのようなレーンが複数ある場合は、番号が最も小さいレーンを選びます。給油が終わるとその車はレーンから出ていき、その後ろの車が給油を行います。一度レーンを選んだら、他のレーンに移ることはできません。また、レーンに並んでいる車の順番が変わることはありません。

レーンの数、入場した車と給油が終了したレーンの情報が与えられたとき、給油が終了した車のナンバーを順番に出力するプログラムを作成せよ。入場の情報はスタンドに入ってくる車のナンバー、給油終了の情報は先頭の車の給油が終了したレーン番号としてそれぞれ与えられる。ただし、最初はどのレーンにも車は並んでいないものとする。

入力

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

$N$ $M$
$info_1$
$info_2$
:
$info_M$

１行目にレーンの数$N$ ($1\leq N \leq 10$)と情報の数$M$ ($2 \leq M \leq 10,000$)が与えられる。続く$M$行に各情報$info_i$が与えられる。各$info_i$は以下のいずれかの形式で与えられる。

0 $lane$

または

1 $car$

最初の数字が0の場合、番号が$lane$ ($1 \leq lane \leq N$)であるレーンに並んでいる先頭の車の給油が終了したことを示す。最初の数字が1の場合、ナンバーが$car$ ($1 \leq car \leq 9,999$)である車がスタンドに入場したことを示す。

入力は以下の制約を満たす。

ガソリンスタンドに入って来る車のナンバーは、全て異なる。

最初の数字が0,1である情報は、それぞれ必ず１つ以上ある。

車のいないレーンに対して、最初の数字が0である情報は与えられない。

出力

給油終了の情報ごとに、給油が終了した車のナンバーを1行に出力する。

入出力例

入力例

2 7
1 999
1 1000
0 2
1 1001
1 1002
0 1
0 1

出力例

1000
999
1002
海苔(のり)

ヒバラ海の浜辺の集落では海苔の生産が盛んです。海苔はすべて長方形に成型されます。海苔を天日干しするときは、２枚の海苔を同じ敷物の上に乗せて、１枚目の上辺と２枚目の上辺が平行になるように置きます。アルバイトのゲンムさんは平行に置くことはできるのですが、まだ慣れていないため重なった部分ができてしまうことがあります。重なった部分は売り物にならないので、重なっていない部分の海苔の面積を求めておく必要があります。

同じ敷物の上に置いた２枚の海苔それぞれの左下端の位置と幅と高さが与えられたとき、重なっていない部分の海苔の面積を出力するプログラムを作成せよ。

入力

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

$x_1$ $y_1$ $w_1$ $h_1$
$x_2$ $y_2$ $w_2$ $h_2$

１行目に１枚目の海苔の左下端の座標$x_1,y_1$ ($0 \leq x_1,y_1 \leq 1,000$)と幅と高さ$w_1,h_1$ ($1 \leq w_1,h_1 \leq 1,000$)が与えられる。２行目に２枚目の海苔の左下端の座標$x_2,y_2$ ($0 \leq x_2,y_2 \leq 1,000$)と幅と高さ$w_2,h_2$ ($1 \leq w_2,h_2 \leq 1,000$)が与えられる。入力はすべて整数で与えられる。

出力

重なっていない部分の海苔の面積を整数で１行に出力する。

入出力例

入力例１

0 0 4 5
2 2 3 6

出力例１

26

入力例２

1 2 2 1
2 0 2 2

出力例２

6

入力例３

0 0 1 1
0 0 1 1

出力例３

0
へびの脱皮

セアブリ高原で発見された新種のへびは、頭から尾にかけて１列に並んだマル（o）とバツ（x）からなる模様が特徴です。下図に例を示しますが、へびの模様は個体により様々です。

xxoooxxxoox

このへびは脱皮のときに、２つのマルが並んだ部分の間すべてが伸びることで成長します。新たに加わった箇所にはマル、バツ、マルが並んだ模様が付きます。

たとえば、長さ３のへびoooが１回脱皮すると、左から1番目と２番目、２番目と３番目のマルの間にマル、バツ、マルが並んだ模様が加わるので、脱皮後のへびはooxoooxooとなります（下線部が新たに加わった箇所です）。もう一回脱皮するとooxooxooxoooxooxooxoo となり、へびの長さは２１になります。

このへびの生態を研究しているあなたは、このへびが脱皮を繰り返したら、とてつもない長さになってしまうかもしれないと危惧しています。

へびの模様と脱皮の回数が与えられたとき、この回数だけ脱皮した後のへびの長さを求めるプログラムを作成せよ。

入力

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

$L$ $N$
$snake$

１行目に脱皮する前の蛇の長さ$L$($1\leq L \leq 100$)と脱皮の回数$N$ ($1 \leq N \leq 50$)が与えられる。続く１行に脱皮する前のへびの模様を表す長さ$L$の文字列$snake$が与えられる。ただし$snake$は英小文字xとoからなる。

出力

へびの長さを１行に出力する。

入出力例

入力例１

3 2
ooo

出力例１

21

入力例２

3 4
xoo

出力例２

48

入力例３

13 30
xooxoooxxxoox

出力例３

12884901889
デジットＫ

アイヅ赤べこ店では、デジットＫと呼ばれるユニークな「くじ」を販売しています。各くじには、左から右へ向かって1列に$N$個の数字が並んでいます。ただし、書かれているのは１から９までの数字です。

くじの購入者は、これらの数字から$K$個の数字を消去し、残った$N-K$個の数字を左から順番に並べてできる数をポイントとして獲得することができます。たとえば$K=3$のとき、くじに$1414213$と書かれていれば、左から$1$、$1$、$2$を選択して消去することで$4413$ポイントを獲得することができます。

数字の列と整数$K$が与えられたとき、獲得できるポイントの最大値を出力するプログラムを作成せよ。

入力

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

$N$ $K$
$a_1$ $a_2$ ... $a_N$

１行目に数字の数$N$ ($1 \leq N \leq 200,000$)と整数$K$ ($0 \leq K < N$)が与えられる。２行目にくじに書かれている$N$個の数$a_i$ ($1 \leq a_i \leq 9$)が与えられる。

出力

ポイントの最大値を１行に出力する。

入出力例

入力例１

7 3
1 4 1 4 2 1 3

出力例１

4423

入力例２

4 1
1 1 9 9

出力例２

199
２つの多角形

ヤエさんは３本以上の真っすぐな棒を繋げて多角形を作り、恋人のジョウ君にプレゼントすることにしました。棒はそれらの端点でのみ繋げることができます。端点はすべて同じ平面上に置きます。一つの接合点で繋がる棒は２本だけで、それらがなす角度は自由に決めることができます。

ヤエさんは、自分が持っている棒をすべて使って大きさが同じくらいの２つの多角形を作ろうとしています。

与えられたすべての棒を使って、２つの多角形を、それらの周囲の長さの差の絶対値が最小となるように作る。各棒の長さが与えられたとき、２つの多角形の周囲の長さの差の絶対値を求めるプログラムを作成せよ。２つの多角形を作成できない場合はそのことを報告せよ。ただし、長さが$a_1 \leq a_2 \leq ... \leq a_m$である$m$ ($3 \leq m$)本の棒で、$a_m ＜a_1+a_2+ ... +a_{m-1}$を満たすとき、これら$m$本の棒でひとつの多角形を作成できるものとする。

入力

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

$N$
$a_1$ $a_2$ ... $a_N$

１行目に棒の数$N$ ($6 \leq N \leq 40$)が与えられる。２行目に各棒の長さ$a_i$ ($1 \leq a_i \leq 100$)が与えられる。

出力

与えられたすべての棒を使って２つの多角形を作れる場合は、長さの差の絶対値の最小値を１行に出力する。２つの多角形を作れない場合は「-1」を１行に出力する。

入出力例

入力例１

6
2 2 3 2 2 2

出力例１

1

入力例２

7
2 2 3 2 2 2 1

出力例２

0

入力例３

6
1 1 1 1 2 4

出力例３

-1
コンピュータシステムの不具合

あなたは世界最高性能のコンピュータシステム「那由多（なゆた）」を設計している。しかし、このシステムのプロトタイプの実装中に、命令列がある条件を満たすとシステムが停止するという不具合が見つかった。

このシステムは、長さ$N$の命令列をプログラムとして与えることで動作する。命令列の中の$m$番目の命令を数$X_m$で表したとき、不具合が起こる条件は、ある整数$i,j$ ($2 \leq i＜j \leq N$)に対して$X_i + X_{j-1} = X_j + X_{i-1}$となる命令のパターンが命令列に存在することであると判明した。

あなたはこの不具合がどの程度の影響になるのかを調べるため、ある長さで作ることができる命令列のうち、何種類の命令列が不具合を起こすかを調べることにした。

長さ$N$の命令列のうち、不具合が起こる命令列が何通りあるかを求めるプログラムを作成せよ。ただし、命令は$1$以上$K$以下の整数で表せることとする。答えは与えられた素数$M$で割った余りとする。

入力

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

$N$ $K$ $M$

１行に、命令列の長さ$N$ ($3 \leq N \leq 100,000$)、命令の種類の数$K$ ($1 \leq K \leq 10$)、素数$M$ ($100,000,007 \leq M \leq 1,000,000,007$)が与えられる。

出力

不具合を起こす命令列の数をMで割った余りを出力する。

入出力例

入力例１

3 2 100000007

出力例１

2

命令列を$(X_1,X_2,X_3)$のように表すと、考えられる命令列は$(1,1,1)$、$(1,1,2)$、$(1,2,1)$、$(1,2,2)$、$(2,1,1)$、$(2,1,2)$、$(2,2,1)$、$(2,2,2)$の８通り。このうち、不具合が起こる命令列は$(1,1,1)$、$(2,2,2)$の２通り。

入力例２

9 10 100000037

出力例２

66631256

不具合が起こる命令列は866631552通りあるが、その数を素数100000037で割った余りが出力となる。
決まりごとの多いジム

イヅア村のスポーツジムには$1$から$N$までの番号が付いた$N$台のトレーニング機器があります。トレーニング機器を１回利用するには、その機器の番号が書かれたチケットが１枚必要です。トレーニング機器を１回利用したときの消費カロリーは、機器ごとに決まっています。

このスポーツジムのチケットを何枚かもらったアツシ君は、運動不足解消のためにジムに行きました。このジムでは、利用者が運動をやりすぎて体を痛めないように、機器の利用回数にルールがあります。たとえば、「２番の機器は３番の機器よりも５回以上多く使ってはいけません」というようなルールです。機器を使う人は、ルールを守って機器を利用しなければなりません。

アツシ君は、もらったチケットを使って、ルールで許される範囲でなるべく多くのカロリーを消費したいと思っています。

もらったチケットとそれぞれの機器の情報が与えられたとき、ルールを守ったときの消費カロリーの最大値を求めるプログラムを作成しなさい。

入力

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

$N$ $R$
$t_1$ $e_1$
$t_2$ $e_2$
:
$t_N$ $e_N$
$a_1$ $b_1$ $c_1$
$a_2$ $b_2$ $c_2$
:
$a_R$ $b_R$ $c_R$

１行目にトレーニング機器の台数$N$ ($1 \leq N \leq 100,000$)とルールの数$R$ ($0 \leq R \leq 100,000$)が与えられる。続く$N$行に、$i$番の機器について、アツシ君がもらったチケットの枚数$t_i$ ($1 \leq t_i \leq 200,000$)とその機器を使ったときの消費カロリー$e_i$ ($0 \leq e_i \leq 100,000$)が与えられる。続く$R$行に、「$a_i$番の機器は$b_i$番の機器よりも$c_i$回以上多く使ってはいけません」というルールを表す数$a_i$ ($1 \leq a_i \leq N$)、$b_i$ ($1 \leq b_i \leq N$)、$c_i$ ($1 \leq c_i \leq 100,000$)が与えられる。

入力は以下の制約を満たす。

同じ機器のペアに対するルールは１度しか与えられない($i \ne j$なら$a_i \ne a_j$または$b_i \ne b_j$)。

同じ機器自身に対するルールは与えられない($a_i \ne b_i$)。

出力

消費カロリーの最大値を１行に出力する。

入出力例

入力例１

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

出力例１

45

もらったチケットを使って、ルールを守って使える各機器の最大の回数は、$1$番が$5$回、$2$番が$7$回、$3$番が$6$回なので、消費カロリーの最大値は$5 \times 1 + 7 \times 4 + 6 \times 2 = 45$となる。

入力例２

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

出力例２

26

入力例３

1 0
200000 100000

出力例３

20000000000
山へ帰そう

近年イズア国では、山から街に降りてくる動物に悩まされている。あなたは動物を山へ帰そうと研究を重ね、以下のことを明らかにした。

それぞれの動物には固有の名前がついている。

２体の動物について、一方の動物の名前のどこかの位置に１文字を挿入すると、もう一方の動物の名前と一致する場合、これらをペアにして山へ帰すことができる。

一度山へ帰った動物が、再び街に降りてくることはない。

あなたは、街に降りてきた動物を、この方法でどのくらい山へ帰すことができるかを計算することにした。

街に降りてきた動物の名前が与えられたとき、この方法で最大いくつのペアを山へ帰すことができるかを求めるプログラムを作成せよ。

入力

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

$N$
$str_1$
$str_2$
:
$str_N$

１行目に動物の数$N$ ($2 \leq N \leq 100,000$)が与えられる。続く$N$行に$i$番目の動物の名前を表す文字列$str_i$が与えられる。ただし$str_i$は英小文字と英大文字で構成された10文字以下の文字列である。また、すべての動物の名前は異なる($i \ne j$なら$str_i \ne str_j$)。

出力

山へ帰すことができる動物のペアの数の最大値を出力する。

入出力例

入力例１

4
aedb
aeb
ebCd
cdE

出力例１

1

入力例２

4
bcD
bD
AbD
bc

出力例２

2
化学物質アルファ

アイヅ製薬では日々化学物質の研究がなされています。いま研究をしているのは、$1$番から$N$番の分子が左端から右端へ直線状にならんだ構造をしている化学物質、コードネーム「アルファ」です。

アイヅ製薬の開発した技術を使えば、アルファを構成する分子の位置を入れ替えることができます。入れ替えは決まった手順でしか行うことができませんが、その手順の途中から始めて途中で終わることもできます。左端から$a$番目と$b$番目の分子を入れ替える操作を$(a,b)$と書くとします。たとえば、$N=5$で決まった手順が$(1,3),(2,5),(4,3),(1,5)$のとき、$1$番目の操作$(1,3)$から始めて$3$番目の操作$(4,3)$で終わることも、$2$番目の操作$(2,5)$から始めて$4$番目の操作$(1,5)$で終わることもできます。

あなたは、アルファの分子の入れ替え手順の中の開始位置と終了位置を選んでシミュレーションを行い、入れ替え後の分子の状態を調べることにしました。

アルファの分子の入れ替え手順が与えられる。シミュレーションを何度か行ったとき、各シミュレーションでの分子の位置について質問に答えるプログラムを作成せよ。質問は次の1.または2.の形をしている。

終了後に左端から$i$番目に位置している分子は、最初は何番目に位置していたか。

最初に$i$ 番目に位置していた分子が終了後にどの位置に来ているか。

ただし、各シミュレーションは、アルファの初期状態（$1$番から$N$番の分子が左端から右端へ直線状にならんだ状態）から始めるものとする。

入力

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

$N$ $K$ $Q$
$a_1$ $b_1$
$a_2$ $b_2$
:
$a_K$ $b_K$
$query_1$
$query_2$
:
$query_Q$

１行目にアルファを構成する分子の数$N$ ($2 \leq N \leq 100,000$)、入れ替え手順の長さ$K$ ($1 \leq K \leq 100,000$)、入れ替え後の分子の状態を調べる回数$Q$ ($1 \leq Q \leq 100,000$)が与えられる。続く$K$行に入れ替え手順の中の各操作$a_i,b_i$ ($1 \leq a_i,b_i \leq N$, $a_i \ne b_i$)が与えられる。$i$番目の操作は、左端から$a_i$番目と$b_i$番目の分子を入れ替える操作を表す。続く$Q$行に、入れ替え終了後の分子の状態を尋ねる質問が与えられる。各$query_i$は以下のいずれかの形式で与えられる。

1 $s$ $t$ $x$

または

2 $s$ $t$ $x$

最初の数字が1の場合、入れ替え手順の中の入れ替えを$s$番から$t$番($1 \leq s \leq t \leq K$)まで行った後に、左側から$x$番目($1 \leq x \leq N$)の分子の番号が何番か尋ねる質問を表す。最初の数字が2の場合、入れ替え手順の中の入れ替えを$s$番から$t$番($1 \leq s \leq t \leq K$)まで行った後に、$x$番($1 \leq x \leq N$)の分子が左から数えて何番目にあるか尋ねる質問を表す。

出力

各質問に対して、答えを１行に出力する。

入出力例

入力例

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

出力例

3
2
4
5
1
6
4
3

入れ替え手順は$(1,3),(2,5),(3,4),(2,4),(2,5)$である。

$1$番目から$6$番目の質問では、手順の$1$番目($s=1$)から$5$番目($t=5$)まですべて行った場合なので、入れ替え後の状態はすべて共通で以下のようになる。

初期状態　1 2 3 4 5 6

$(1,3)$の後 3 2 1 4 5 6

$(2,5)$の後 3 5 1 4 2 6

$(3,4)$の後 3 5 4 1 2 6

$(2,4)$の後 3 1 4 5 2 6

$(2,5)$の後 3 2 4 5 1 6

$7$番目の質問では$s=3,t=4$なので、入れ替え後の状態は以下のようになる。分子番号$2$番は左から数えて$4$番目にあるので、答えは4になる。

初期状態　1 2 3 4 5

$(3,4)$の後 1 2 4 3 5

$(2,4)$の後 1 3 4 2 5

$8$番目の質問では$s=1,t=1$なので、入れ替え後の状態は以下のようになる。

初期状態　1 2 3 4 5

$(1,3)$の後 3 2 1 4 5
三角形の個数の和

座標平面上の原点$O$を左下、座標$(W,H)$にある点を右上とする長方形の領域が与えられています。この領域に含まれる、$x$座標と$y$座標がともに整数である点を３個以上含む点の集まりを考えます。このような点の集まりのすべての組み合わせの個数を$N$とし、点の集まりのそれぞれを$D_1, D_2, ..., D_N$で表したとき、$D_1, D_2, ..., D_N$のそれぞれに含まれる点を頂点とする三角形を考えます。

たとえば、図のように$W=H=1$のとき、点$O(0,0)$、$A(1,0)$、$B(1,1)$、$C(0,1)$のうち、３個以上含む点の集まりは$\{O,A,B\}$、$\{O,A,C\}$、$\{O,B,C\}$、$\{A,B,C\}$、$\{O,A,B,C\}$の５つです。この例の場合、点の集まりのそれぞれに含まれる三角形は次のようになります。

$\{O,A,B\}$に含まれる三角形は$OAB$のみ。

$\{O,A,C\}$に含まれる三角形は$OAC$のみ。

$\{O,B,C\}$に含まれる三角形は$OBC$のみ。

$\{A,B,C\}$に含まれる三角形は$ABC$のみ。

$\{O,A,B,C\}$に含まれる三角形は$OAB$、$OAC$、$OBC$、$ABC$の４個。

この例からわかるように、同じ三角形が２つ以上の点の集まりに含まれる場合があります。たとえば、三角形$OAB$は点の集まり$\{O,A,B\}$にも$\{O,A,B,C\}$にも含まれます。

$W$と$H$が与えられる。点の集まり$D_1, D_2, ..., D_N$それぞれに含まれる点を頂点とする三角形の個数を$t_1, t_2, ..., t_N$とするとき、三角形の個数の和$t_1+t_2+...+t_N$を計算するプログラムを作成せよ。

入力

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

$W$ $H$

１行に$W$と$H$ ($1 \leq W,H \leq 1,000$)が与えられる。

出力

それぞれの点の集まりに含まれる三角形の個数の和を1,000,000,007で割った余りを１行に出力する。

入出力例

入力例１

1 1

出力例１

8

入力例２

1 2

出力例２

144

入力例３

100 100

出力例３

879128399
A と B の 2 人のプレーヤーが， 0 から 9 までの数字が書かれたカードを使ってゲームを行う．最初に， 2 人は与えられた n 枚ずつのカードを，裏向きにして横一列に並べる．その後， 2 人は各自の左から 1 枚ずつカードを表向きにしていき，書かれた数字が大きい方のカードの持ち主が，その 2 枚のカードを取る．このとき，その 2 枚のカードに書かれた数字の合計が，カードを取ったプレーヤーの得点となるものとする．ただし，開いた 2 枚のカードに同じ数字が書かれているときには，引き分けとし，各プレーヤーが自分のカードを 1 枚ずつ取るものとする．

例えば， A，B の持ち札が，以下の入力例 1 から 3 のように並べられている場合を考えよう．ただし，入力ファイルは n + 1 行からなり， 1 行目には各プレーヤのカード枚数 n が書かれており， i + 1 行目（i = 1，2，... ，n）には A の左から i 枚目のカードの数字と B の左から i 枚目の カードの数字が，空白を区切り文字としてこの順で書かれている．すなわち，入力ファイルの 2 行目以降は，左側の列が A のカードの並びを，右側の列が B のカードの並びを，それぞれ表している．このとき，ゲーム終了後の A と B の得点は，それぞれ，対応する出力例に示したものとなる．

入力ファイルに対応するゲームが終了したときの A の得点と B の得点を，この順に空白を区切り文字として 1 行に出力するプログラムを作成しなさい．ただし， n ≤ 10000 とする．

入力例１
入力例２
入力例３

3	3	3

9 1	9 1	9 1

5 4	5 4	5 5

0 8	1 0	1 8

出力例１
出力例２
出力例３

19 8	20 0	15 14

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、A の得点と B の得点を１行に出力する．

入力例

3
9 1
5 4
0 8
3
9 1
5 4
1 0
3
9 1
5 5
1 8
0

出力例

19 8
20 0
15 14

各データセットの出力の後（Bの得点の後）に改行を入れること。

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
与えられた変換表にもとづき，データを変換するプログラムを作成しなさい．

データに使われている文字は英字か数字で，英字は大文字と小文字を区別する．変換表に現れる文字の順序に規則性はない．

変換表は空白をはさんで前と後ろの 2 つの文字がある(文字列ではない)．変換方法は，変換表のある行の前の文字がデータに現れたら，そのたびにその文字を後ろの文字に変換し出力する．変換は 1 度だけで，変換した文字がまた変換対象の文字になっても変換しない．変換表に現れない文字は変換せず，そのまま出力する．

入力ファイルには，変換表（最初の n + 1 行）に続き変換するデータ（n + 2 行目以降）が書いてある． 1 行目に変換表の行数 n，続く n 行の各行は，空白をはさんで 2 つの文字，さらに続けて， n + 2 行目に変換するデータの行数 m，続く m 行の各行は 1 文字である． m ≤ 105 とする．出力は，出力例のように途中に空白や改行は入れず 1 行とせよ．

入力例

3

A a

0 5

5 4

10

A

B

C

0

1

4

5

a

b

A

出力例

aBC5144aba

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、変換後の文字列を１行に出力する．

入力例

3
A a
0 5
5 4
10
A
B
C
0
1
4
5
a
b
A
3
A a
0 5
5 4
10
A
B
C
0
1
4
5
a
b
A
0

出力例

aBC5144aba
aBC5144aba

各データセットの出力（変換後の文字列）の後に改行を入れること．

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
サイコロが以下の図のような向きで置かれている．

ここで使用するサイコロは，この図のように，上側に 1，南側に 2 があるときは，東側に 3 があるものとする．サイコロの向かいあう面の和は必ず 7 なので，見えない面はそれぞれ北側 5，西側 4，下側 6 になっている．

この初期配置の状態から指示に従ってサイコロを動かしていく．ただし，指示は以下の 6 通りの操作を何回か行うものである．

North，East，South，West の各操作は指示された方向へサイコロを 90 度回転させる．
Right，Left の 2 つの操作は上下の面はそのままで水平方向に 90 度回転させる．（回転させる向きに要注意．）

初期配置で上の面に出ている目 1 を初期値とし， 1 回の操作が終わるたびに，上の面に出ている目の数を加算していき，指示にしたがってすべての操作を終えたときの合計値を出力するプログラムを作成しなさい.

入力ファイルの 1 行目には総指示回数 n が書かれていて，続く n 行の各行には「North，East，South，West，Right，Left」のいずれか 1 つの指示が書かれているものとする．ただし， n ≦ 10000 とする．

入力例１	入力例２

5	8

North	West

North	North

East	Left

South	South

West	Right

North

Left

East

出力例１	出力例２

21	34

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、合計値を１行に出力する．

入力例

5
North
North
East
South
West
8
West
North
Left
South
Right
North
Left
East
0

出力例

21
34

各データセットの出力（合計値）の後に改行を入れること。

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
大きさが異なる n 個のコップと 3 つのトレイ（お盆）A，B，C があり，それらのコップは 3 つのトレイの上にそれぞれ何個かずつ一山に重ねて置かれている．ただし，どのトレイにおいても，そのトレイの中で一番小さいコップが一番下に， 2 番目に小さいコップがその上に， 3 番目に小さいコップがその上にと，小さい順に伏せて重ねてある．例えば，下図の右側は， n = 5 個のコップがトレイ A，B，C にそれぞれ 2 個，0 個，3 個重ねて置かれている状態を示している．

このように，コップの初期状態が与えられたとき，次の規則 1 〜 3 を守りながら，すべてのコップを A または C のどちらかのトレイに移動させるには何回移動を行えばよいかを求めたい．

（規則 1） 1 回に 1 つのコップだけを移動させることができる．それは，そのトレイにあるコップの中で一番上のコップ（つまり，一番大きいコップ）である．

（規則 2）大きいコップの上に小さいコップを重ねてはいけない．

（規則 3）コップ 1 個の直接移動は，トレイ A から B，B から A，B から C，C から B のみが許され， A から C への直接移動や C から A への直接移動は許されない．

n 個のコップの初期状態と整数 m が与えられたとき， m 回以内の移動で， A または C のどちらかのトレイにすべてのコップをまとめて重ねることができるかどうかを判定し，可能な場合には移動回数の最小値を，不可能な場合には -1 を出力するプログラムを作成しなさい．

入力ファイルの 1 行目には， n と m がこの順に空白を区切り文字として書いてある． 1 ≦ n ≦ 15 であり， 1 ≦ m ≦ 15000000 である． 2 行目，3 行目，4 行目には， 1 から n までの整数を何個かずつ 3 つのグループに分けて，それぞれのグループ内で小さい順（昇順）に並べたものが書いてある．ただし，各行の先頭（それらの整数の前）には，それらの個数が書いてある． 2 行目に書かれている整数（先頭の 1 つを除く）はトレイ A の上に重ねられている各コップの大きさを表す．同様に， 3 行目に書かれている整数（先頭の 1 つを除く）はトレイ B の上に重ねられている各コップの大きさを表し， 4 行目に書かれている整数（先頭の１つを除く）はトレイ C の上に重ねられている各コップの大きさを表す．

入力例１
入力例２
入力例３
入力例４

3 10	4 20	2 5	3 3

0	2 1 2	2 1 2	0

1 1	1 3	0	1 1

2 2 3	1 4	0	2 2 3

出力例１
出力例２

出力例３
出力例４

9	3	0	-1

入力

入力は複数のデータセットからなる．n, m がともに 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、移動回数または -1 を１行に出力する．

入力例

3 10
0
1 1
2 2 3
4 20
2 1 2
1 3
1 4
2 5
2 1 2
0
0
3 3
0
1 1
2 2 3
0 0

出力例

9
3
0
-1

各データセットの出力（移動回数または -1）の後に改行を入れること．

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
次のようなゲームを考える． 1 から n までの数が 1 つずつ書かれた n 枚のカードが k 組ある．これら kn 枚のカードをよくシャッフル（よく切ること）して， k 枚ずつの山を作り横一列に並べる．このようにしてできる n 個の山の左から i 番目の（k 枚のカードの）山を「山 i 」と呼ぶことにする．

ゲームは山 1 から始める．山の一番上のカード 1 枚を引き（引いたカードは元の山に戻さない），そのカードに書かれていた数が i だった場合には山 i の一番上のカード 1 枚を引く．このようにして，引いたカードに書かれていた数を番号とする山の一番上のカード 1 枚を引くことを繰り返し，すべての山にカードが無くなれば成功である．まだカードが残っている山があるのに，次にカードを引くべき山が無くなっていた場合は失敗である．

途中で失敗した場合には，そのまま失敗で終了するか，または残ったカードの山をそのまま（山の番号もそのまま）にしてゲームを再開する．ゲームを再開する場合は，最初に引くカードはカードが残っている山のうちの一番左の山からとする（その山の一番上のカードが最初に引かれるカードとなる）．再開後も再開前と同様の方法でゲームを進め，すべての山にカードが無くなれば成功であり，まだカードが残っている山があるのに，次にカードを引くべき山が無くなった場合は失敗である．

このようなゲームの再開を最大 m 回まで行うものとする．ただし，m は 0 か 1 である．つまり， 1 回も再開しないか， 1 回だけ再開するかのいずれかである．ゲーム開始前のシャッフルの仕方によりカードの初期配置は異なる．当然，カードの初期配置により，再開せずに成功することもあれば，再開して成功することも，再開して失敗することもある．十分シャッフルしているので，どの初期配置も全て同じ確率で現れるものと考えることにして，再開が m 回以内で成功する確率 p を求めたい．この確率 p を小数で表し，小数第 r 位まで求めて出力するプログラムを作りなさい．ただし，次の条件を満たすように出力すること.

十分大きい正整数 K を取ると p×10K が 整数となる場合， 小数部は途中から 0 が続くが，その 0 も出力すること． 例えば， p = 3/8 = 0.375 の場合， r = 5 なら 0.37500 と出力し， r = 2 なら 0.37 と出力する． p = 1.0 の場合も同様に， 例えば r = 3 なら 1.000 と出力すること．

例えば 0.150000… は循環小数 0.1499999… として表すこともできるが， このような場合， 前者の表し方を用いる．

入力ファイルの 1 行目には整数 n，k，m，r がこの順に空白を区切り文字として書いてある． 1 ≦ n ≦ 10000， 1 ≦ k ≦ 100， m = 0 または m = 1， 1 ≦ r ≦ 10000 である．

入力例１

入力例２
入力例３

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

出力例１
出力例２
出力例３

0.50000	0.833	1.000

入力

入力は複数のデータセットからなる．n, k, m, r がすべて 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、指定通りに p を１行に出力する．

入力例

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

出力例

0.50000
0.833
1.000

各データセットについて，指定通りに出力した p の後に改行を入れること．

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
ある学校で修学旅行へ行く計画がある.そのためにアンケート調査を行った.
生徒は 1 から n までの生徒番号を持ち,旅行候補の場所を 1 から m までの番号で表し,行きたい場所に ○,行きたくない場所に×の印をつけて提出している.

このとき, 行きたい場所の人数が多い順に,場所の番号を出力するプログラムを作成せよ.人数が同じときは,場所の番号順とする.

入力データ の 1 行目は生徒の人数 n と旅行候補の場所の数 m が空白で区切られ, i + 1 行に生徒 i のアンケート結果を ○ は 1 で×は 0 で表し,空白で区切られた m 個の数字が並んでいる.1 ≤ n ≤ 1000, 1 ≤ m ≤ 100 とする.

入力例１

4 6

1 0 1 0 1 1

1 1 0 1 0 0

1 1 1 0 0 0

1 0 1 0 1 0

出力例１

1 3 2 5 4 6

入力

入力は複数のデータセットからなる．n, m がともに 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、場所の番号 を１行に出力する．

入力例

4 6
1 0 1 0 1 1
1 1 0 1 0 0
1 1 1 0 0 0
1 0 1 0 1 0
4 6
1 0 1 0 1 1
1 1 0 1 0 0
1 1 1 0 0 0
1 0 1 0 1 0
0 0

出力例

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

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
0 から 9 までの数字だけで構成された文字列が与えられたとき,その文字列から次の規則に従って新しい文字列を作る操作を考える.与えられた文字列を左端から1文字ずつ順に読んで行き,同じ数字 a が r 個続いていた場合,個数 r と数字a を空白で区切らずにこの順で書き出す.与えられた文字列の右端まで読み,最後の書き出しが終わったところまでを途中何回書き出しがあったとしても全部まとめて操作1回とカウントする.2回目以降の操作は前回の操作により書き出された文字列を与えられた文字列として同様の操作を実施する.例えば “122244” という文字列が与えられた場合には左端から順に1個の1, 3個の2,2個の4なのでこの操作1回で得られる文字列は “113224” であり,“44444444444” (11 個の4)の場合には得られる文字列は “114” となる.

100 文字以下の与えられた文字列に上の操作を n 回実施した文字列を出力するプログラムを作成せよ.ただし, n ≤ 20 とする.

入力データ は 2 行からなり,1 行目に操作回数 n, 2 行目に最初の文字列が書かれている.

入力例

5

11

出力例

13112221

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、指定された回数の操作を施した文字列 を１行に出力する．

入力例

5
11
5
11
0

出力例

13112221
13112221

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
同じ大きさの正方形の紙が n 枚ある.これらの紙の下部を水平に揃えて何列かに並べる.ただし,隣り合う列は左側が右側より低くならないように並べなければならない.例えば, n = 5 のときは,次のような 7 通りの並べ方が可能である.

これらを,各列に並んだ正方形の個数の列で表すことにする.例えば, n = 5 の
ときは,それぞれ,

(5) (4, 1) (3, 2) (3, 1, 1) (2, 2, 1) (2, 1, 1, 1) (1, 1, 1, 1, 1)

と表わされる.

n を入力したとき, 辞書式順序で全て出力するプログラムを作成せよ.n ≤30
とする.ただし, 辞書式順序とは2つの並べ方 (a1, a2 , ..., as) が並べ方 (b1, b2, ..., bt ) に対して, a1 > b1 または, ある整数 i > 1 が存在して a1 = b1 , ..., ai-1 = bi-1 かつ ai > bi が成り立つとき (a1, a2, ..., as) が (b1 , b2, ..., bt) より先に出力されるように並べることである.

入力データ は 1 行からなり,1 行目に n が書かれている.

出力には並べ方を辞書式順序で 1 行に1通りずつ書き最後に改行を入れること. 並べ方は (a1, a2, ..., as) の出力は整数 a1, a2, . . . , as をこの順番に空白で区切って出力すること.

入力例１

5

出力例１

5

4 1

3 2

3 1 1

2 2 1

2 1 1 1

1 1 1 1 1

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 5 を超えない．

出力

データセットごとに、辞書式順序で全て出力する．

入力例

5
5
0

出力例

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

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
両端にリングのついた紐を考える.リングは正整数が付いていて,紐を区別する.紐の両端のリングには異なる数 a, b が付けられる.これを,[a, b] と記述する.複数の紐があり,一方の紐と他方の紐のリングに付いている数が同じ場合,そのリングのところで,これらの紐をつなげることができて,つなげてできたものを鎖と呼ぶことにする.例えば,[1, 3] と [3, 4] という紐からは [1, 3, 4] という鎖ができる.紐と鎖や鎖同志も同じ整数が付いているリングのところでつなげることができるものとする.

例えば,鎖 [1, 3, 4] と紐 [5, 1] からは [5, 1, 3, 4] ができ,鎖 [1, 3, 4] と鎖 [2, 3, 5] からは, 中央でクロスしたような形になる.鎖 [1, 3, 4] と鎖 [4, 6, 1] からは, 輪の形ができる.

このように様々な形ができるが, そのうちの一部で,同じ数の付いたリングは一度だけたどるつながった複数の紐を鎖と呼ぶことにする.例えば,鎖 [1, 3, 4] と鎖[2, 3, 5] からできる,中央でクロスしたような形には, [1, 3, 5],[2, 3, 4] という鎖も含まれ,鎖 [1, 3, 4] と鎖 [4, 6, 1] からできる輪には, [1, 3, 4, 6],[3, 4, 6, 1],[4, 6, 1, 3]などの鎖が含まれる.

これらの鎖に対して,含まれる数の個数を長さと定義する. 与えられた複数の紐に対して,つなげられるものはすべてつなげると1つ以上の
鎖を含む形ができる.そのうちの最大の鎖の長さを求めるプログラムを作成せよ.

入力データ の最初の行には紐の個数である正整数 1 ≤ n ≤ 100 が書いてあり,つづく n 行のそれぞれには, 空白で区切られた 2 つの整数 a, b が書いてあり 1 ≤ a < b ≤ 100 となっている.各行の 2 つの整数は 1 つの紐の両端の整数を表わす.

入力例１
入力例２
入力例３

7	6	7

1 3	1 2	1 3

3 4	2 3	2 4

1 4	3 4	3 5

2 7	4 5	4 6

5 7	1 5	6 7

6 7	2 6	2 6

1 7	4 7

出力例１
出力例２
出力例３

5	6	4

入力

入力は複数のデータセットからなる．n が 0 のとき入力が終了する．データセットの数は 10 を超えない．

出力

データセットごとに、最大の鎖の長さを１行に出力する．

入力例

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

出力例

5
6
4

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
平面に長方形のシートが何枚か置かれている. これらのシートで覆われている部分の面積や周長を求めるプログラムを作成せよ.

ただし, 平面を座標平面とみなしたとき, シートの配置は次の条件 (1), (2) を満たすものとする.

(1) 各シートの長方形の 4 頂点の x, y 座標は全て 0 以上 10000 以下の整数であり, 長方形の各辺は x 軸, または y 軸に平行である.

(2) シートの枚数は高々 10000 枚以下である.

入力データ の 1 行目に長方形の個数 n と問題の種類を表す整数 r が空白で区切って書かれている. 2 行目以降の各行には, 各シートの左下頂点座標 (x1, y1) と右上頂点座標 (x2, y2) の座標値が x1, y1, x2, y2 の順で空白で区切って書いてある.

出力には r = 1 のとき 1 行目に面積を, r = 2 のとき 1 行目に面積, 2 行目に周囲の長さを出力する. いずれの場合も最後に改行を入れること.

また, テストデータの 40% では長方形の頂点の座標が 0 以上 100 以下で, そのうちの 1/2 では面積だけを求める問題である. さらに, 全体の 1/2 は面積だけを求める問題である.

入力例１
入力例２
入力例３
入力例４

5 1	5 2	2 2	3 2

0 0 3 2	0 0 3 2	0 0 8 9	2 2 8 8

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

0 4 6 5	0 4 6 5	5 0 7 9

3 3 5 6	3 3 5 6

5 0 7 6	5 0 7 6

出力例１
出力例２
出力例３
出力例４

29	29	80	45

38	36	36

入力

入力は複数のデータセットからなる．n, r がともに 0 のとき入力が終了する．データセットの数は 10 を超えない．

出力

データセットごとに, r = 1 のとき 1 行目に面積を, r = 2 のとき 1 行目に面積, 2 行目に周囲の長さを出力する.

入力例

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

出力例

29
29
38
80
36
45
36

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
得点

問題

JOI高校の2人の生徒 A さんと B さんは，情報，数学，理科，英語の4教科の試験を受けた． A さんと B さんのこれら4教科の得点が与えられると， Aさんの合計点 S と Bさんの合計点 T のうち大きな方を出力するプログラムを作成せよ．ただし，同点の場合は S (= T) を出力せよ．

入力

入力は2行からなる．

1行目は4つの整数が1つの空白を区切りとして書かれており，それぞれ順に， A さんの情報の得点，数学の得点，理科の得点，英語の得点を表している．

2行目は4つの整数が1つの空白を区切りとして書かれており，それぞれ順に， B さんの情報の得点，数学の得点，理科の得点，英語の得点を表している．

どの教科の得点も100点満点で，負の得点が与えられることはない．

出力

出力は, 求める1つの整数からなる.

入出力例

入力例1

100 80 70 60
80 70 80 90

出力例1

320

入力例2

100 80 70 60
80 70 60 100

出力例2

310

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
未提出者は誰だ

問題

JOI大学のM教授はプログラミングの授業を担当している．クラスには30人の受講生がいて各受講生には1番から30番までの出席番号がふられている．この授業の課題を28人の学生が提出した．提出した28人の出席番号から提出していない2人の出席番号を求めるプログラムを作成せよ．

入力

入力は28行あり，各行には提出者の出席番号（1以上30以下）が1つずつ書かれている．入力される出席番号に重複はないが，どのような順に入力されるかはわからない．

出力

出力は2行からなる． 1行目に2人の未提出者の出席番号のうち小さいほうを， 2行目に大きいほうを出力せよ．

入出力例

入力例 1

3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

出力例 1

2
8

入力例 2

9
30
6
12
10
20
21
11
7
5
28
4
18
29
17
19
27
13
16
26
14
23
22
15
3
1
24
25

出力例 2

2
8

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
シーザー暗号

問題

ガイウス・ユリウス・カエサル（Gaius Julius Caesar)，英語読みでジュリアス・シーザー（Julius Caesar）は，古代ローマの軍人であり政治家である．カエサルは，秘密の手紙を書くときに， 'A' を 'D' に， 'B' を 'E' に， 'C' を 'F' に，というように3つずらして表記したという記録が残っている．

大文字のアルファベット26文字だけからなる文字列を，カエサルがしたように3文字ずつずらす変換を施し得られた文字列がある．このような文字列を元の文字列に戻すプログラムを作成せよ．

各文字の変換前と変換後の対応は次のようになる．

変換前
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

変換後
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C

例えば，この方法で文字列 JOI を変換すると MRL が得られ，この方法で変換された文字列 FURDWLD の元の文字列は CROATIA である．

入力

入力は1行だけからなり，その1行は大文字のアルファベットのみで構成される文字列を1つ含む．

入力される文字列の長さは 1000 以下である．

出力

入力された文字列を元に戻した文字列だけを含む1行を出力する。

入出力例

入力例 1

MRL

出力例 1

JOI

入力例 2

FURDWLD

出力例 2

CROATIA

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
カードの並び替え

問題

1 から 2n の数が書かれた 2n 枚のカードがあり，上から 1, 2, 3, ... , 2n の順に積み重なっている．

このカードを，次の方法を何回か用いて並べ替える．

整数 k でカット

上から k 枚のカードの山 A と 残りのカードの山 B に分けた後， 山 A の上に山 B をのせる．

リフルシャッフル

上から n 枚の山 A と残りの山 B に分け， 上から A の1枚目， B の1枚目， A の2枚目， B の2枚目， …， A の n枚目， B の n枚目， となるようにして， 1 つの山にする．

入力の指示に従い，カードを並び替えたあとのカードの番号を，上から順番に出力するプログラムを作成せよ．

入力

1 行目には n （1 ≦ n ≦ 100）が書かれている． すなわちカードの枚数は 2n 枚である．

2 行目には操作の回数 m （1 ≦ m ≦ 1000）が書かれている．

3 行目から m + 2 行目までの m 行には， 0 から 2n-1 までのいずれか 1 つの整数 k が書かれており， カードを並べ替える方法を順に指定している．

k = 0 の場合は， リフルシャッフルを行う．

1 ≦ k ≦ 2n-1 の場合は， k でカットを行う．

出力

出力は2n 行からなる． 1 行目には並べ替え終了後の一番上のカードの番号， 2 行目には並べ替え終了後の上から 2 番目のカードの番号というように， i 行目には上から i 番目のカードの番号を出力せよ．

入出力例

入力例 1

2
2
1
0

出力例 1

2
4
3
1

入力例 2

3
4
2
4
0
0

出力例 2

1
5
4
3
2
6

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
品質検査

問題

あなたはある機械の製造工場で品質管理の責任者をしている． この機械には， 部品として電源とモーターとケーブルが必要である． 製造工場には電源が a 個， モーターが b 個， ケーブルが c 個あり， それぞれ 1 から a まで， a+1 から a+b まで， a+b+1 から a+b+c までの番号が付いている． 困ったことに， 部品の中に故障しているものがあるかもしれない． 工場ではどの部品が故障していてどの部品が正常であるかを知りたい．

そこで， 工場では次の方法で部品を検査した． 電源とモーターとケーブルを１つずつ持ってきてつなぎ， 動作させてみる． このとき， ３つの部品がすべて正常であるときは正しく動作して「合格」とわかる． ３つの中に故障している部品が１つでも入っているときは正しく動作しないので「不合格」とわかる． （工場で作っている機械はとても精密なので， 故障した部品がまざっているのに偶然正しく動作してしまうなどということは起きないのだ．）

あなたには検査結果のリストが渡される． 検査結果のリストの各行には， 検査に使った電源とモーターとケーブルの番号と， 検査が合格だったか不合格だったかが書かれている．

検査結果のリストが与えられたとき， すべての部品を， 検査結果から確実に故障しているとわかる部品と， 確実に正常とわかる部品と， 検査結果からは故障しているとも正常であるとも決まらない部品に分類するプログラムを作成せよ．

入力

入力は複数のデータセットからなる．各データセットの形式は以下の通りである．入力は３つのゼロを含む行で終了する．

1 行目には 3 個の整数が空白区切りで書かれており， 順に電源の個数 a, モーターの個数 b, ケーブルの個数 c を表す．

2 行目には 1 個の整数が書かれており， 検査結果のリストに含まれる検査の回数 N が書かれている．

続く N 行は検査結果のリストを表す． 各行には， 4 個の整数 i, j, k, r が１つの空白を区切りとして書かれており， 電源 i とモーター j とケーブル k をつないで検査した結果が， 「合格」 (r=1 のとき) か「不合格」 (r=0 のとき) だったことを表す.

a, b, c, N は 1 ≤ a, b, c ≤ 100, 1 ≤ N ≤ 1000 を満たす.

データセットの数は 5 を超えない．

出力

データセットごとに以下の形式で出力する．各データセットの出力は a+b+c 行からなる.

i 行目 (1 ≤ i ≤ a+b+c)：

検査結果から部品 i が故障しているとわかる場合は 0 を出力する.

検査結果から部品 i が正常とわかる場合は 1 を出力する.

検査結果から部品 i が故障しているか正常であるかが決まらない場合は 2 を出力する.

入出力例

入力例

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

出力例

2
1
1
0
1
0

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。