alexjercan/bugnet huggingface dataset:
盤面上にロボットと壁，ゴールが設置されており， ロボットの行動パターンを記述したプログラムが与えられる．

与えられるプログラムは以下のEBNF で表される．

プログラム:= {文};
文:= if 文|while 文|動作文;
if 文:= "[", 条件, プログラム, "]";
while 文:= "{", 条件, プログラム, "}";

動作文:= "^"|"v"|"<"|">";
条件:= ["~"], "N"|"E"|"S"|"W"|"C"|"T";

「プログラム」は0個以上の「文」からなり，1つ以上の文が存在する場合は 1 つ目の文から順番に1 つずつ文が実行される．「文」は「動作文」，「if 文」，「while 文」のいずれかである．「動作文」は"^", "v","<",">" のいずれかであり，それぞれ以下の動作が実行される．

"^": 前進

"v": 後退

"<": 左に90 度回転

">": 右に90 度回転

「if 文」は "["，「条件」，「プログラム」，"]" を順番に並べたもので，以下の手順で実行される．

「条件」の内容が真かどうか判定する

判定が真なら「プログラム」の内容を実行し，このif 文の処理を終了する

判定が偽ならこのif 文の処理を終了する

「while 文」は "{"，「条件」，「プログラム」，"}" を順番に並べたもので，以下の手順で実行される．

「条件」の内容が真かどうか判定する

判定が真なら「プログラム」の内容を実行し，1 に戻る

判定が偽なら，この while 文の処理を終了する

「条件」は "N", "E", "S", "W", "C", "T" のいずれかであり，先頭には"~" をつけることができる．それぞれの記述は以下の真偽値を表す．

先頭に "~" が付いている場合は真偽値が逆転

N: 北を向いているならば真，そうでなければ偽

E: 東を向いているならば真，そうでなければ偽

S: 南を向いているならば真，そうでなければ偽

W: 西を向いているならば真，そうでなければ偽

C: 目の前に壁があるならば真，そうでなければ偽

T: 常に真

ロボットは最初，北を向いているものとする．ロボットは壁を通ることができず，何もないマスのみを移動できる．もし，プログラムが壁の上を通るような動作を実行しようとした場合，ロボットは移動せずその場にとどまる．最後に，ロボットはゴールに到達した時，実行途中のプログラムが残っていたとしてもすべて中断して動作を停止する．

このとき，ロボットがゴールにたどり着くまでにどのぐらい時間がかかるのか知りたい．ロボットは条件判定やプログラムの読み込みに関しては非常に高速に実行できるので実際の動作時間を決定するのは「動作文」のみである．そこで，このロボットがゴールに辿り着くまでに「動作文」を何回実行するかを教えてほしい．

なお，壁の上を通るような動作を実行しようとして，実際には「動作文」の動作が行われなかった場合にも「動作文」は実行されたものとみなす．

Input

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

H W
a1,1a1,2 . . . a1,W
a2,1a2,2 . . . a2,W
: : :
aH,1aH,2 . . . aH,W
s

H は盤面の高さ，W は盤面の幅を表す．

次に盤面を真上から見た状態が与えられる．この盤面は上，下，左，右がそれぞれ北，南，西，東に対応する．各マスの状態を表す ai,j は以下のいずれかの文字である．

"s" : ロボット（ロボットの初期位置．このマスには壁がないことが保証されている）

"g" : ゴール

"#" : 壁（ロボットは壁の上を移動することはできない）

"." : 何もないマス

s にはロボットに与えられるプログラムが文字列として入力される．

Constraints

1 ≤ H,W ≤ 50

1 ≤ s の文字数 ≤ 1,000

ai,j は".", "#", "s", "g" のいずれか

"s", "g" はそれぞれ 1 回しか登場しない

i = 1 または i = H または j = 1 または j = W ならば ai,j = "#"（盤面の外周は壁で囲まれていることが保証されている）

s として与えられるプログラムは構文的に正しい

Output

たどり着ける場合は"到達するまでに実行した「動作文」の数" を，たどりつけない場合は "-1" を出力せよ．なお，壁の上を通るような動作を実行しようとして，実際には「動作文」の動作が行われなかった場合にも「動作文」が実行されたものとみなす点に注意せよ（入力例1）．

Sample Input 1

5 3
###
#g#
#.#
#s#
###
^<^<vv

Output for the Sample Input 1

5

Sample Input 2

5 7
#######
#.#g..#
#.###.#
#s....#
#######
{T{~C^}<}

Output for the Sample Input 2

17

Sample Input 3

5 7
#######
#.#g..#
#.###.#
#s....#
#######
{T{~C^}>}

Output for the Sample Input 3

-1
文字列 S と， m 個のクエリが与えられる．i 番目のクエリは二つの文字列 xi, yi で与えられる．

各クエリについて，文字列 S の部分文字列であり， xi で始まり yi で終わるものの中で，最長の長さを答えよ．

文字列 S について， |S| は S の長さを表す．また，文字列 T が文字列 S の部分文字列であるとは，ある整数 i が存在して， 1 ≤ j ≤ |T| に対して Tj = Si+j を満たすことを言う．ただし Tj は T の j 番目の文字を表す．

Input

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

S
m
x1 y1
x2 y2
:
xm ym

1 行目には，文字列 S が与えられる．

2 行目には，クエリの個数 m が与えられる．

3 行目からの m 行のうち i 行目には i 番目のクエリ文字列 xi, yi が空白区切りで与えられる．

Constraints

1 ≤ |S| ≤ 2 × 105

1 ≤ m ≤ 105

1 ≤ |xi|, |yi|

$\sum^m_{i=1}$ (|xi| + |yi|) ≤ 2 × 105

S 及び xi, yi は，半角の英小文字のみからなる．

Output

以下の形式で最大の部分文字列の長さを答えよ．

len1
len2
:
lenm

1 行目からの m 行のうち i 行目には， i 番目のクエリについて，条件を満たす最長の部分文字列の長さ leni を出力せよ．そのような部分文字列がない場合，0 を出力せよ．

Sample Input 1

abracadabra
5
ab a
a a
b c
ac ca
z z

Output for the Sample Input 1

11
11
4
3
0

文字列 S として，abracadabra が与えられる．

"ab" で始まり "a" で終わる部分文字列は，"abra" や "abraca", "abracada", "abracadabra" の4 種類があるが，最長の部分文字列は "abracadabra" で，長さは 11 である．

"a" で始まり "a" で終わる最長の部分文字列も同様に "abracadabra" で，長さは 11 である．

"b" で始まり "c" で終わる最長の部分文字列は "brac" で，長さは 4 である．

"ac" で始まり "ca" で終わる最長の部分文字列は "aca" で，長さは 3 である．

"z" で始まり "z" で終わる部分文字列は存在しない．よって0 を出力する．

Sample Input 2

howistheprogress
4
ist prog
s ss
how is
the progress

Output for the Sample Input 2

9
12
5
11

Sample Input 3

icpcsummertraining
9
mm m
icpc summer
train ing
summer mm
i c
i i
g g
train i
summer er

Output for the Sample Input 3

2
10
8
0
4
16
1
6
6
今年も，全国プログラミング選手権大会の時期がやってきた．全国大会の参加権を賭けた地区大会は， 2n チームが1 対1 の勝ち残り式トーナメント方式で対決する．

トーナメント表にはチーム番号 0, . . . 2n − 1 が割り振られており，1 回戦から n 回戦までの対決手順は次の通りである．

1 回戦では，（チーム番号が l のチーム）と（チーム番号が l + 1 のチーム）が対決する．(l ≡ 0 (mod 2))

i + 1 回戦(1 ≤ i < n) では，「チーム番号が l 以上 l + 2i 未満のチームのうち， i 回戦までの対決で 1 回も負けていないチーム」と「チーム番号が l + 2i 以上 l + 2i+1 未満のチームのうち， i 回戦までの対決で一回も負けていないチーム」が対決する．(l ≡ 0 (mod 2i+1))

n 回戦まで終わると，各チームの順位は 2n − (そのチームが勝った回数) 位で確定する．なお，この対決には引き分けが存在しないため，対決したチームのいずれか一方が勝ち，もう一方が負ける．

晴れて地区大会の代表に選ばれた私達は，他の地区大会の結果をマネージャーに調べてもらうことにした．ここで調べてもらった結果が「マネージャーから受け取った順位表」であった．「マネージャーから受け取った順位表」をより詳細に説明すると，長さ 2n の数列で i ( 0 ≤ i ≤ 2n − 1 ) 番目の要素にチーム番号 i のチームの順位が書かれているものである．

だが，「マネージャーから受け取った順位表」には同じ順位が大量に並んでいた！トーナメントのルール上，同じ順位が大量に並ぶなんてありえないはずだ．そこで，「マネージャーから受け取った順位表」を「無矛盾な順位表」にするために順位を変更するチーム数の最小値を計算してどのくらい順位表が間違っているかをマネージャーに教えてあげよう．「無矛盾な順位表」とは，順位が確定したトーナメントの結果として起こりうる順位表のことを表す．

Input

入力には，「マネージャーから受け取った順位表」が以下の形式で与えられる．

n m
a0 a1 . . . am
b0 b1 . . . bm−1

1 行目は n, m の2 個の整数からなり， 2n は「地区大会の参加チーム数」，m は「『マネージャーから受け取った順位表』で連続した順位が並んでいる区間の個数」を表す．

2 行目は ai(0 ≤ i ≤ m) の m + 1 個の整数からなり，各 ai は「『マネージャーから受け取った順位表』で連続した順位が並んでいる区間の区切り位置」を表す．

3 行目は bi(0 ≤ i < m) の m 個の整数からなり，各2bi は「『マネージャーから受け取った順位表』におけるチーム番号が ai 以上 ai+1 未満のチームの順位」を表す．

Constraints

1 ≤ n ≤ 30

1 ≤ m ≤ 10,000

0 = a0 < a1 ≤ . . . ≤ am−1 < am = 2n

0 ≤ bi ≤ n

Output

「マネージャーから受け取った順位表」を「無矛盾な順位表」にするために順位を変更するチーム数の最小値を1 行に出力せよ．

Sample Input 1

1 1
0 2
1

Output for the Sample Input 1

1

参加チーム数が2 の「無矛盾な順位表」は，{"チーム番号 0 のチームの順位", "チーム番号 1 のチームの順位"} として {1, 2} と {2, 1} の2 通りがある．順位表 {2, 2} を「無矛盾な順位表」に修正するためには，いずれかのチームの順位を 1 に変更しなければならない．

Sample Input 2

2 3
0 1 2 4
0 1 2

Output for the Sample Input 2

2

Sample Input 3

2 3
0 1 3 4
0 2 1

Output for the Sample Input 3

0

Sample Input 4

4 5
0 1 2 4 8 16
0 1 2 3 4

Output for the Sample Input 4

10
閉路のない連結な有向グラフが与えられる．(有向グラフが連結であるとは，これを無向グラフとした時に連結であるという事である．)

このグラフに対して一つの頂点を選んで首都 s を定めたい．

T(v) = "v から全ての点を到達可能にするために必要な「辺の反転」操作の回数の最小値"とする．

ただし，「辺の反転」とは，頂点 v, u に関して (v, u) に張られていた有向辺を削除して (u, v) に張り直すことである．

頂点 s が首都であるとは任意の頂点 v に対して， T(s) ≤ T(v) が成立することである．

首都であるような頂点をすべて列挙して答えよ．

Input

入力は以下のような形式で M + 1 行で与えられる．

N M
a1 b1
:
aM bM

1 行目には二つの整数 N, M が与えられ，与えられるグラフは N 頂点 M 辺であることを表す．

2 行目から M + 1 行目にはそれぞれ二つの整数 ai, bi が与えられ，ai から bi に有向辺が張られていることを表す．

Constraints

1 ≤ N ≤ 10,000

0 ≤ M ≤ 100,000

0 ≤ ai ≤ N − 1

0 ≤ bi ≤ N − 1

ai ≠ bi

i ≠ j ならば (ai, bi) ≠ (aj, bj)

与えられるグラフは連結で閉路はない．

与えられるグラフに対して，入次数が 0 である頂点の個数は 50 以下である．

Output

以下の形式で2 行で出力せよ．

cnum cost
c1 c2 . . . ccnum

1 行目には二つの整数 cnum, cost を空白区切りで出力せよ．

2 行目には cnum 個の整数 ci を空白区切りで出力せよ．

変数の意味は以下の通りである．

− cnum : 首都の性質を満たす頂点数

− cost : 首都となる頂点 v に対する T(v) の値

− ci : 首都の性質を満たす頂点を番号に関して昇順に並べた時，i 番目の頂点番号

Sample Input 1

3 2
0 1
2 1

Output for the Sample Input 1

2 1
0 2

頂点 0 を首都とするときには辺 (2,1) を反転すれば，(0,1), (1,2) の辺を持つグラフができるので 1 が答え．

T(0) = 1, T(1) = 2, T(2) = 1 である．

Sample Input 2

5 4
0 1
2 1
2 3
4 3

Output for the Sample Input 2

3 2
0 2 4

Sample Input 3

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

Output for the Sample Input 3

2 1
0 3
太郎君は Vongress と呼ばれるゲームが大好きである．Vongress とは，n 頂点からなる凸多角形である盤の上で行われる陣取りゲームである．

このゲームでは，m 人のプレイヤーが，盤の内側にそれぞれ 1 つ駒を置く．駒の位置は x座標と y 座標の組で表され，駒の大きさは考えない．

あるプレイヤーの陣地とは，盤上でその人が置いた駒が最も近くにあるような場所からなる領域である．プレイヤーは，自分の陣地の面積をスコアとして得る．

太郎君はいつも盤の形状，置かれた駒の位置，各プレイヤーのスコアを記録していたが，ある日うっかり駒の位置を記録するのを忘れてしまった．そこで太郎君は，盤の形状とプレイヤーの得点から，矛盾のない駒の位置を書き加えることにした．

あなたの仕事は，太郎君に代わって各プレイヤーの得点と矛盾しない駒の位置を求めることである．

Input

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

n m
x1 y1
x2 y2
:
xn yn
r1
r2
:
rm

n は盤である凸多角形の頂点数，m はプレイヤーの数を表す．(xi, yi) は盤の頂点の座標を表す．r1, . . . , rm は各プレイヤーが得たスコアの比を表す．

Constraints

3 ≤ n ≤ 100

1 ≤ m ≤ 100

−104 ≤ xi, yi ≤ 104

1 ≤ rj ≤ 100

入力は全て整数である．

凸多角形の頂点 (xi, yi) は反時計回りの順番で与えられる．

Output

m 個の駒の位置を以下の形式で出力せよ．

x'1 y'1
x'2 y'2
:
x'm y'm

(x'k, y'k) は，k 番目のプレイヤーの駒の位置である．

出力は次の条件を満たさなければならない．

駒が凸多角形の内側にある．境界線上にあってもよい．

どの 2 つの駒も 10−5 以上距離が離れている．

与えられる凸多角形の面積を S とする．出力から求まる k 番目のプレイヤーの陣地の面積について， $\frac{r_k}{r_1+...+r_m} S$ との絶対誤差または相対誤差が 10−3 未満である．

Sample Input 1

4 5
1 1
-1 1
-1 -1
1 -1
1
1
1
1
1

Output for the Sample Input 1

0.0000000000 0.0000000000
0.6324555320 0.6324555320
-0.6324555320 0.6324555320
-0.6324555320 -0.6324555320
0.6324555320 -0.6324555320

下図のように駒を配置すれば，全プレイヤーが同じスコアを得られる．黒い線分が盤，赤い点がプレイヤーの駒，青い線分がプレイヤーの陣地の境界線をそれぞれ表す．

Sample Input 2

4 3
1 1
-1 1
-1 -1
1 -1
9
14
9

Output for the Sample Input 2

-0.5 -0.5
0 0
0.5 0.5

下図のように駒を配置すればよい．

Sample Input 3

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

Output for the Sample Input 3

1.7320508076 -0.5291502622
1.4708497378 -0.2679491924
-0.4827258592 0.2204447068
-0.7795552932 0.5172741408
-1.0531143674 0.9276127521

下図のように駒を配置すればよい．
A : Taps / 蛇口

Problem

あいづ君の家の浴槽には2つの蛇口 A, B がついており、 ひねるとひねった角度に比例した量の水が出てくる。 出てくる水の温度は A は tA [℃]、B は tB [℃]で一定である。 風呂に入るときにはそれらの量を調節して混ぜあわせることで適度な温度になるようにしている。

tA [℃] の水 vA [L] と tB [℃]の水 vB [L] を混ぜ合わせた後の温度は、(tA × vA + tB × vB) / (vA + vB) になる。 例えば、tA = 80℃, tB = 20℃ で 40℃ のお湯を張りたいときには、 A から 100mL/s 、 B から 200mL/s ずつ出るように蛇口を調節すればよい。

ところが、このごろ蛇口が老朽化してきたため A は dA [mL/s] 、B は dB [mL/s] 単位でしか 出る水の量を調節できなくなってしまった。 すなわち、A から出る水の量が 0, dA, 2×dA, 3×dA, ...[mL/s] という 飛び飛びの値にしか設定できなくなってしまったのである(B も同様)。

あいづ君は長年培ってきた勘によって狙った温度ぴったりに 調節できたのだが、それが通用しなくなった。 困ったあいづ君は、自動的に目的の温度 T[℃] に最も近い温度になるような水の出し方に調節するプログラムを書くことにした。 ただし、毎秒出せる水の量には上限があり、 A と B の水の量の和は D [mL/s] 以下でなければならない。 また、水を出さないことにはお風呂に入れないため、毎秒出る水の量は最低でも 1mL/s 以上でなければならない。 つまり、 1 ≦ A から出る水の量 + B から出る水の量 ≦ D を満たす必要がある。

Input

入力は次のような形式で与えられる．

T D
tA tB
dA dB

1行目の T, D は、それぞれ目的の温度、水の量の上限を表す。 2行目の tA, tB は、それぞれ A の温度、 B の温度を表す。 3行目の dA, dB は、それぞれ A から出る水の量の単位、 B から出る水の量の単位を表す。

Constraints

入力は全て整数である。

1 ≦ T, tA, tB ≦ 99

1 ≦ D ≦ 1000

1 ≦ dA, dB ≦ D

Output

T に最も近くなるように水を混ぜあわせた後の温度とT との差の大きさの最小値を1行で出力せよ。ただし、10-4 以下の誤差は許容される。

Samples

Sample Input 1

40 1000
80 20
100 100

Sample Output 1

0.0000000000

問題文の例である。

Sample Input 2

38 1000
80 20
100 95

Sample Output 2

0.2222222222

Aの蛇口から 200mL/s、Bの蛇口から 475mL/s の量の水を出したとき、37.7777...℃ となり、これが38℃ に最も近くなる。
B : Books / 本

Problem

大学生のいづあ君はかなりの読書家である。面白そうだと思った本は迷わず買うため、蔵書が増えすぎて管理できなくなっているのが悩みである。そこでいづあ君は、持っている本の中から目的の本を検索するシステムを作ることにした。

全ての本は次の 3 つの属性を持つ。

title : 本のタイトルを表す文字列である。

author : 本の著者を表す文字列である。

date : 本の出版日を表す 2014/07/07 のような形式をした文字列である。

検索のクエリは次のような形式で与えられる。

Q_title Q_author Q_date_from Q_date_to

Q_title : タイトルに文字列 Q_title を含む本がヒットする。

Q_author : 著者名に文字列 Q_author を含む本がヒットする。

Q_date_from : 出版日が Q_date_from と同じかそれより後である本がヒットする。

Q_date_to : 出版日が Q_date_to と同じかそれより前である本がヒットする。

ただし、クエリに * (アスタリスク)が指定された場合は任意の文字列にヒットする。ある本がヒットするかの判定は上記 4 つの論理積で行われる。つまり、 1 つ以上ヒットしていない属性がある場合はその本はヒットしていないものとする。(「ヒットする」とは本が検索クエリに合致することを意味する。)

いづあ君の仕事は与えられたクエリを順に処理するプログラムを書くことである。

Input

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

N
book 1
...
book N
Q
query 1
...
query Q

N はいづあ君が持っている本の数であり、続く N 行にはそれぞれの本に関する情報が続く。本に関する情報は次のような形式である。

title author date

Q は検索クエリの数であり、続く Q 行にクエリが続く。検索のクエリは次のような形式で与えられる。

Q_title Q_author Q_date_from Q_date_to

Constraints

N, Q は整数である。

1 ≦ N ≦ 100

1 ≦ Q ≦ 100

タイトルが同じ本は含まれない。

本のタイトル、著者、及びそれらに対するクエリの文字列の長さは 50 文字以下であり、含まれる文字はアルファベットの大文字と小文字のみである。大文字と小文字は区別される('a'と'A'は違う文字とみなす)。ただしクエリは*一文字のこともある。

本の出版日及びそれに対するクエリは 2014/07/31 のような形式で表され、西暦年 (4桁)/月(2桁)/日(2桁) という意味である。この例の場合は 2014 年 7 月 31 日を表す。

日付は 1970 年 1 月 1 日から 2037 年 12 月 31 日の範囲内である。

15 月 40 日のような無効な日付は入力されない。

Output

各クエリに対して、ヒットする本のタイトルを答えよ。 2 冊以上ヒットする場合は、1 行に 1 冊ずつ、入力された順番に全てのタイトルを出力せよ。 1 冊もヒットしない場合は 1 行も出力してはならない。クエリとクエリの間には空行を挟むこと。

Samples

Sample Input 1

6
antbook iwiWataKitamasa 2012/01/28
hogebook foo 2000/01/01
hugabook bar 2000/01/01
cheeterbook chokudai 2012/09/29
aojbook YutakaWatanabe 2014/06/28
piyobook buz 2000/01/01
4
a * * *
* chokudai * *
* Chokudai * *
* * 2014/01/01 2014/12/31

Sample Output 1

antbook
hugabook
aojbook

cheeterbook

aojbook

3 番目のクエリは、一見 2 番目のクエリと同じように見えるが、先頭の文字が大文字となっており、そのような名前のちょくだいさんは著者名として存在しないため、 1 行も出力してはならない。
C : Pruning / 枝刈り

Problem

とにかくあつい。あづい君の住んでいる地域は今年猛暑であった。 さらに、家の庭には 1 本の木が生えており、毎日やかましく鳴く蝉が暑さを増幅させているような気がする。

庭の木は、まさにグラフ理論でいうところの木のような形をしており、この木にはたくさんの蝉が止まっている。
蝉は、必ず枝の先端(葉)または枝の分かれ目(頂点)に止まる習性がある。 ただし、木の根には 1 匹も止まることはない。
この木のある枝(辺)を切ると、それより空側(根と反対側)にいる蝉を全て駆除することができる。
ただし、枝を切るためには、その枝に応じた労力が必要となる。

(注 : 括弧内の言葉はグラフ理論の言葉で置き換えたものである。以降は全てグラフ理論の言葉で表現することにする。)

高度情報化社会となった現代においては、 部屋に居ながらにして頂点に何匹の蝉がいるか、 そして各辺を切るのに要する労力を調べることが出来る。

あづい君はその情報を用いて、 木に止まっている全ての蝉を駆除するのに必要な最小の労力を調べるプログラムを書くことにした。

Input

入力は次のような形式で与えられる．

N
C1 ... CN-1
u0 v0 p0
...
uN-2 vN-2 pN-2

N は木に含まれる頂点の数である。 各頂点には 0 ... N - 1 の番号が振られ、0番目の頂点を根とする。 C1 ... CN-1 は、各頂点に止まっている蝉の数であり、 Ci が i 番目の頂点に止まっている蝉の数である。 根には、蝉は1匹も止まっていない。 2 + i 行目の ui, vi, pi は、木に含まれる辺の情報である。ui, vi は辺が結ぶ 2 頂点の番号であり、pi はこの辺を切るのに必要な労力である。

Constraints

入力は全て整数である。

与えられるグラフは木である。

2 ≦ N ≦ 1,000

0 ≦ Ci ≦ 1,000

0 ≦ ui , vi < N

1 ≦ pi ≦ 1,000

Output

蝉を全て駆除するために必要な最小の労力を 1 行で出力せよ。

Samples

Sample Input 1

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

Sample Output 1

4

頂点 0 と 1 をつなぐ辺を切れば、全ての蝉を駆除することができる。

Sample Input 2

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

Sample Output 2

3

頂点 1 と 2 、 1 と 3 、 1 と 4 をつなぐ辺の3本を切れば最小の労力で蝉を駆除することができる。 なお、頂点 0 と 1 をつなぐ辺を切ることで全ての蝉を駆除することができるが、これにはコストが 4 かかってしまう。
D : Chopsticks / 箸

Problem

お箸は 2 本 1 セット(1 膳)で用いるものである。しかしあるとき一人暮らしの大学生であるいあづ君は箸立てに入っているお箸が奇数本であることに気がついた。これは明らかにおかしい。いつの間にか何本か無くしてしまったのである。
困ったいあづ君は、今後このようなことが無いように箸の本数を毎日記録することにした。

ところが、いあづ君が決めた記録の方法は少し変わっている。 それは、まずM 個の自然数 A1, ... , AM を決めた後、 箸の本数をそれらで割った余りを毎日記録するというものである。 例えばある日に残っている箸の本数が T のとき、 その日の記録として T % A1 , ... , T % AM を付ける。 ただ、たまにいくつか記録し忘れたり、間違った記録を付けたりすることもあるようだ。 (x % y は x を y で割った余りである。)

ここでいあづ君は大事なことに気づいた。 これだと最終日に何本残っているか 1 つに決まらない！

ポジティブないあづ君は、 D 日分の記録をもとに、 D 日目の記録をつけた直後に残っている箸の本数の最大値を求めるプログラムを書くことにした。

Input

入力は次のような形式で与えられる．

N M D
A1 A2 ... AM
R11 R12 ... R1M
R21 R22 ... R2M
...
RD1 R12 ... RDM

N, M, D は、それぞれ記録を開始する直前にあったお箸の本数、余りを求めるのに使う整数の個数、記録をつけた日数である。A1 A2 ... AM は余りを求めるのに使う整数である。

2 + d 行目の Rd1, Rd2, ... ,RdM は、d 日目に残っているお箸の本数を A1, A2, ... ,AM のそれぞれで割った余りである。Rdi = -1 のときは、その記録を付け忘れたことを意味する。

Constraints

入力は全て整数である。

1 ≦ N ≦ 1,000,000,000

1 ≦ M ≦ 10

1 ≦ D ≦ 100

2 ≦ Ai ≦ 100

i ≠ j のとき Ai ≠ Aj

0 ≦ Rij < Ai

i 日目に存在する箸の数は、i - 1 日目に存在していた箸の数と同等か、それより少なくなる。

Output

D 日目に残っていると考えられる箸の数の最大値を 1 行で出力せよ。 記録に明らかに間違いがある場合は -1 を出力せよ。

Samples

Sample Input 1

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

Sample Output 1

2

0 日目に 3 本あった箸は、 1 日目に 3 本、 2 日目に 2 本になったと考えられる。

Sample Input 2

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

Sample Output 2

-1

0 日目に 3 本あった箸は、 1 日目に 0 本になったと考えられる。ところが 2 日目の 4 で割った余りが1になっている。

Sample Input 3

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

Sample Output 3

3

0 日目に 3 本あった箸は、 1 日目も 3 本あったと考えられる。2 日目は記録し忘れてしまった。
E : Sigma / Σ

Problem

小学生のづあい君は同じ足し算にも得意不得意があり、 0 以上の整数 X, Y に対して、X + Y を計算するのにかかる時間(秒)が次のように決まる。

1 の位から順番に計算していく。

10 進数表記で 10i 位の計算には xi × yi + ci 秒かかる。

xi は X の10進数表記で 10i の位の数である。

yi は Y の10進数表記で 10i の位の数である。

ただし i が X の桁数より大きくなる時は xi = 0 とする。Y についても同様である。

ci は、 i = 0 または xi-1 + yi-1 + ci-1 < 10 ならば 0、 そうでなければ 1 である。

0 以上の整数 i についての xi × yi + ci の総和が X + Y の計算にかかる時間である。

ある日、づあい君の先生は長さ N の整数列 a0, ... , aN-1 の和を計算する宿題を出した。づあい君は数列の順番を並び替えることはできないが、足し算の式に括弧を付けることにより、足し算の順番を自由に変えることができる。例えば N = 4 の場合、順番は次の 5 通りある。

((a0 + a1) + a2) + a3

(a0 + a1) + (a2 + a3)

(a0 + (a1 + a2)) + a3

a0 + ((a1 + a2) + a3)

a0 + (a1 + (a2 + a3))

それぞれの括弧 (x + y) の中で上で説明した時間がかかるとすると、総和を求めるのにかかる時間は最小で何秒になるだろうか。

Input

入力は次のような形式で与えられる。

N
a0 a1 ... aN-1

Constraints

入力はすべて整数である。

2 ≦ N ≦ 300

0 ≦ ai ≦ 1,000,000

Output

答えの秒数を1行で出力せよ。

Samples

Sample Input 1

3
1 2 3

Sample Output 1

11

次のように計算すると最も速い。

2 + 3 = 5 ( 2 × 3 = 6 秒かかる)

1 + 5 = 6 ( 1 × 5 = 5 秒かかる)
A : Soccer / サッカー

問題文

A国とB国の間でAIサッカーの試合をした。あなたの手元には、ある時刻にボールを持っていた選手とその位置を記録した表がある。表は N 行からなり、上から i 番目の行は次に示す要素からなる。

フレーム数 f_i

ボールを持っている選手の背番号 a_i

その選手が属するチーム t_i

その選手の位置を表す座標 x_i , y_i

フレーム数とは、ゲームの開始時刻に 0 に設定され、 1/60 秒ごとに 1 加算される整数のことである。例えば、ゲーム開始からちょうど 1.5 秒後のフレーム数は 90 である。 背番号は各チーム内の 11 人の選手に一意にふられる整数である。さらに、表中の連続する 2 つの記録において、同じチームの異なる背番号の選手がボールを持っているとき、その間に「パス」が行われたとする。記録に存在しないフレームは考慮しなくてよい。

さて、エンジニアであるあなたの仕事は、各チームの選手間で行われたパスのうち、 最も距離(ユークリッド距離)が長いものの距離と、それにかかった時間を求めることである。 距離が最長となるパスが複数ある場合は、かかった時間が最も短いものを出力せよ。

入力

入力は以下の形式で与えられる。t_i=0 のときA国、 t_i=1 のときB国を表す。

N
f_0 a_0 t_0 x_0 y_0
…
f_{N−1} a_{N−1} t_{N−1} x_{N−1} y_{N−1}

制約

入力はすべて整数である

1 \≤ N \≤ 100

0 \≤ f_i \lt f_{i+1} \≤ 324\,000

1 \≤ a_i \≤ 11

t_i = 0,1

0 \≤ x_i \≤ 120

0 \≤ y_i \≤ 90

出力

A国の最長のパスにかかった距離と時間、B国の最長のパスにかかった距離と時間を、それぞれ1行に出力せよ。時間は秒単位とし、距離、時間ともに 10^{−3} 以下の絶対誤差は許される。パスが一度も行われなかった場合はともに −1 と出力せよ。

サンプル

サンプル入力1

5
0 1 0 3 4
30 1 0 3 4
90 2 0 6 8
120 1 1 1 1
132 2 1 2 2

サンプル出力1

5.00000000 1.00000000
1.41421356 0.20000000

A国は長さ 5 のパスを 30 フレームの時刻に 60 フレーム =1 秒でし、B国は長さ √2 のパスを 120 フレームの時刻に 12 フレーム =0.2 秒でした。これらがそれぞれの最長のパスである。

サンプル入力2

2
0 1 0 0 0
10 1 1 0 0

サンプル出力2

-1 -1
-1 -1

サンプル入力3

3
0 1 0 0 0
30 2 0 1 1
40 1 0 2 2

サンプル出力3

1.4142135624 0.1666666667
-1 -1

サンプル入力4

3
0 1 0 0 0
10 2 0 1 1
40 1 0 3 3

サンプル出力4

2.8284271247 0.5000000000
-1 -1
B : RUPC

問題文

ロシア連邦でプログラミングコンテストが開催される。コンテストには N 個の問題が出題され、M 人の参加者がいる。問題 i には得点 a_i が設定されており、参加者 j の実力は b_j であることがわかっている。問題 i と参加者 j について、 a_i ≤ b_j のときかつそのとき限り、参加者 j は問題 i を必ず解くことができる。 コンテストを通した参加者の得点は、その人が解くことができた問題の得点の総和である。また、参加者 j は、このコンテストでの目標点数 c_j を定めている。

各参加者が、目標点数以上の得点を獲得できるか判定せよ。

入力

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

N
a_{0} a_{1} a_{2} … a_{N−1}
M
b_{0} b_{1} b_{2} … b_{M−1}
c_{0} c_{1} c_{2} … c_{M−1}

制約

入力はすべて整数である

1 \≤ N \≤ 300\,000

1 \≤ M \≤ 300\,000

0 \≤ a_{i} \≤ 1\,000\,000

0 \≤ b_{i} \≤ 1\,000\,000

0 \≤ c_{i} \≤ ∑a_k

出力

答えを M 行で出力せよ。 i 行目には、参加者 i−1 が目標点数以上の得点を獲得できるなら Yes、できないなら No と出力せよ。

サンプル

サンプル入力1

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

サンプル出力1

Yes
Yes
Yes
Yes
Yes
No
No

各参加者の得られる得点は以下のようになる。

参加者0 : 1+1=2

参加者1 : 1+2+1+3=7

参加者2 : 1+2+1+3+4=11

参加者3 : 1+2+1+3+4+5=16

参加者4 : 1+2+1+3=7

参加者5 : 1+1=2

参加者6 : 0

サンプル入力2

8
1 1 2 3 3 4 6 100
4
1 3 4 99
1 10 15 120

サンプル出力2

Yes
Yes
No
No
C : Shopping / 買い物

問題文

料理が得意な2D君は昼ごはんを作ろうとしている。料理には N 個の材料 a_{0}, a_{1}, … , a_{N−1} が全てが必要である。

さて、今2D君の家の冷蔵庫には一つも材料が入っていないので、スーパーに買いに行かなければならない。スーパーでは材料 a_{i} を値段 x_{i} 円で買うことができる。

2D君は魔法使いでもあり、 M 種類の魔法が使える。 i 番目の魔法を材料 s_{i} にかければ材料 t_{i} に、また逆に t_{i} にかければ s_{i} に変えることができる。さらに、一つの材料に対して複数の魔法を繰り返して使うことができる。例えば、 p から q に変える魔法と、 q から r に変える魔法の2つを使って、 p から r を得ることができる。

2D君は魔法の力を借りてなるべく安く材料を揃えることにした。料理を完成させるために2D君が買う必要のある材料の、値段の総和の最小値を求めよ。

入力

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

N
a_{0} x_{0}
…
a_{N−1} x_{N−1}
M
s_{0} t_{0}
…
s_{M−1} t_{M−1}

制約

数値はすべて整数である

材料の名前はすべて 1 文字以上 10 文字以下のアルファベット小文字からなる

i ≠ j なら a_{i} ≠ a_{j}

1 \≤ x_{i} \≤ 1,000

1 \≤ N \≤ 5,000

0 \≤ M \≤ {\rm min}(N(N−1)/2, 1000)

s_{i} ≠ t_{i}

s_{i},t_{i} の組に重複はない

s_{i},t_{i} は a_{0},…,a_{N−1} に含まれる

出力

答えを1行で出力せよ。

サンプル

サンプル入力1

2
tako 2
yaki 1
1
tako yaki

魔法によって安い yaki を tako に変えることができるので、 yaki を 2 個買えばよい。

サンプル出力1

2

サンプル入力2

5
a 1
b 2
c 2
d 4
e 3
5
b a
a c
c d
e b
c b

サンプル出力2

5

下に示すように、全ての材料を a から変えてそろえることができる。

a : a そのまま

b : a -> c -> b

c : a -> c

d : a -> c -> d

e : a -> b -> e
D : Hopping Hearts / こころぴょんぴょん

問題文

N 羽のうさぎが長さ L−1 の平均台の上にいる。 i 番目のうさぎの初期位置は整数 x_iであり、 0 ≤ x_{i} \lt x_{i+1} ≤ L−1 を満たす。座標は右に進むほど大きくなる。任意の i 番目のうさぎは、任意の回数だけ、ちょうど距離 a_i だけ右方向にジャンプ(すなわち、x_i から x_i+a_i へ移動)することができる。ただし別のうさぎを飛び越えること、−1 以下または L 以上の位置に入ることはできない。また、同時にジャンプしていられるのは高々 1 羽であり、ある座標に存在できるうさぎの数も高々 1 羽である。

初期状態から始めてジャンプを任意の回数繰り返したあとの x_{0}, …, x_{N−1} の状態として、あり得るものは何通りあるか。1\,000\,000\,007 で割った余りで求めよ。

入力

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

N L
x_{0} … x_{N−1}
a_{0} … a_{N−1}

制約

入力はすべて整数である

1 \≤ N \≤ 5\,000

N \≤ L \≤ 5\,000

0 \≤ x_{i} \lt x_{i+1} \≤ L−1

0 \≤ a_{i} \≤ L−1

出力

答えを1行で出力せよ。

サンプル

サンプル入力1

1 3
0
1

サンプル出力1

3

1/0でうさぎがいる/いないを表現すれば、100, 010, 001 の 3 通りである。

サンプル入力2

2 4
0 1
1 2

サンプル出力2

4

1100, 1001, 0101, 0011 の 4 通りである。

サンプル入力3

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

サンプル出力3

272278100

二項係数 C(50,10) = 10\,272\,278\,170 であり、それを 1\,000\,000\,007 で割ったあまりは 272\,278\,100 である。
E : Arojam's Mask / 仮面

問題文

あなたは勇者である。勇者が旅をしている世界は N 個の街と、異なる街同士を結ぶ M 本の道からなる。道 i は街 a_i と街 b_i を結び、双方向に移動可能である。

街 S から出発し、街 T に移動することが勇者の目的である。 S,T は異なる街である。勇者は 0 日目に街を出発し、ちょうど 1 日かけて 1 本の道を通って移動することができる。道を使った移動には日数の制限 R があり、R 日目を超えることはできない。

また、勇者は任意の街で「オカリナを吹く」こともできる。オカリナを吹くと、時は 0 日目に、位置は街 S に戻される。つまり、R 回を超える移動を行う場合は、最低一度はオカリナを吹かなければならない。

さらに、勇者がある街に位置すると「イベント」が発生することがある。イベントは E 種類あり、i 番目のイベントは、街 c_{i} で発生する。イベントは勇者がそこにいると自動的に発生し、新たに道 a’_i と b’_i を結ぶ道が生じる。この道はオカリナを吹いても消えることはなく、初めから存在する道とも、別のイベントによって追加される道とも重複しない。ある町で起こるイベントは高々1つである。

さて、勇者の今日の仕事は、街 T に到達するまでに必要な移動の回数とオカリナを吹く回数の和の最小値を求めるプログラムを書くことである。

入力

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

N M E S T R
a_{0} b_{0}
…
a_{M−1} b_{M−1}
a’_{0} b’_{0} c_{0}
…
a’_{E−1} b’_{E−1} c_{E−1}

制約

入力はすべて整数である

2 \≤ N \≤ 100

1 \≤ M+E \≤ N(N−1)/2

0 \≤ E \≤ 4

0 \≤ R \≤ 100

0 \≤ S,T,a_i,b_i,a’_i,b’_i,c_i \≤ N−1

S ≠ T

a_{i} ≠ b_{i}, a’_{i} ≠ b’_{i}

a_{i} と b_{i}、a’_{i} と b’_{i}の全ての組は重複しない

i ≠ j なら c_{i} ≠ c_{j}

出力

答えを一行で出力せよ。どうしても T へ到達できない場合は −1 を出力せよ。

サンプル

サンプル入力1

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

サンプル出力1

9

例えば以下のように移動すればよい。イベントを起こすまでは道(4,5), (3,4)は存在しないことに注意せよ。

街2に行くと4から5へ移動できるようになる

オカリナを使用し0へ戻る

街7に行くと3から4へ移動できるようになる

オカリナを使用し0へ戻る

0から5へまっすぐ進む

サンプル入力2

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

サンプル出力2

8

オカリナを1度も吹かない経路が最適である。

サンプル入力3

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

サンプル出力3

5

街 S でイベントが起こることもある。
F : Tree / 木

問題文

大きさ N の根付き木がある。 各頂点には 0 から N−1 までの番号が付けられ、根が 0である。 任意の辺の両端の頂点について、割り当てられた整数は根に近いほうが小さい。初めは全ての辺の重みは 0 である。

この木に対する Q 個のクエリを順に処理せよ。クエリには以下の 2 種類がある。

頂点 u, v の距離(パスに含まれる辺の重みの和)を求める。

頂点 v の子孫(自身を含まない)に接続する辺の重みを全て x 増加させる。

入力

入力は以下の形式からなる。

N Q
a_0 b_0
…
a_{N−2} b_{N−2}
q_0
…
q_{Q−1}

a_i,b_i は i 番目の辺が結ぶ頂点である。 q_i は i 番目のクエリを表す 3 つの整数であり、次のうちいずれかである。

0 \ u_i \ v_i : 頂点 u_i, v_i の距離を求める。

1 \ v_i \ x_i : 頂点 v_i の子孫に接続する辺の重みを全て x_i 増加させる。

制約

入力はすべて整数である

2 \≤ N \≤ 150\,000

1 \≤ Q \≤ 150\,000

0 \≤ a_{i},b_{i},u_{i},v_{i} \≤ N−1

a_{i} < b_{i}

0 \≤ x_{i} \≤ 300

出力

距離を求めるクエリのたびに、結果を1行で出力せよ。

注意

この問題では入出力が非常に大きくなりうるので高速な関数を使用してほしい。

サンプル

サンプル入力1

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

サンプル出力1

8
5

図のようになる。

サンプル入力2

13 7
0 1
1 2
2 3
1 4
3 5
1 6
2 7
0 8
7 9
5 10
8 11
1 12
1 2 143
0 8 7
0 10 6
1 1 42
1 6 37
0 3 6
1 6 38

サンプル出力2

143
429
269
A: A-Z Cat / A-Z キャット

物語

あいずにゃんは若ヶ松高校のプログラミングコンテスト部，通称ぷろこん部に所属する2年生である．とてつもなくかわいい．あいずにゃんは友達のジョイに頼まれて猫を預かることになった．A-Z キャットと呼ばれる珍種の猫である．あいずにゃんは預かった A-Z キャットを「あいずにゃん 2 号」と (勝手に) 名付け，大層可愛がった．

A-Z キャットは特定の条件を満たす文字列を好むとされる．そこであいずにゃんが試しに文字列を与えてみると，あいずにゃん 2 号は文字列の一部を爪で切り取った後，満足げな表情を浮かべた．どうやら，好みの文字列に書き換えようとしているようだ．

天使のごとくかわいいあいずにゃんにぞっこんである D のひとは，あいずにゃんのために A-Z キャットが好む文字列の条件を見つけ出した．それは 'A' と 'Z' が交互に繰り返される文字列であり，かつ 'A' から始まり 'Z' で終わる文字列である．A-Z キャットはとても賢いので，最小限の文字消去で好みの文字列に変換しようとする．あいずにゃんにいい格好をしたい D のひとは，与えられた 'A' と 'Z' のみからなる文字列を A-Z キャットがどのような文字列に変換するか求めるプログラムを書くことにした．

問題

英大文字のみからなる文字列 S が与えられる．S の任意の文字を好きなだけ削除することで，'A' と 'Z' が交互に出現し，かつ 'A' から始まり 'Z' で終わる文字列を作る．削除回数を最小化したとき得られる文字列を求めよ．

入力形式

入力として文字列 S が1行に与えられる．S は英大文字のみからなり，1 ≤ |S| ≤ 20を満たす．

出力形式

S に対し最小回数の文字削除を行って得られる，'A' と'Z' が交互に出現し，かつ 'A' から始まり 'Z' で終わる文字列を 1 行に出力せよ．どのような文字削除を行っても条件を満たす文字列が得られない場合は -1 を 1 行に出力せよ．

入力例1

AIZUNYANPEROPERO

出力例1

AZ

入力例2

AZAZ

出力例2

AZAZ

入力例3

ZDDYAZAWABDDZAZPIDDA

出力例3

AZAZAZ

入力例4

ZZZZAAAAAA

出力例4

-1
B: Cram School Schedule / 塾の時間割

物語

あなたは塾の経営者である．あなたの塾は個人授業制で1人の生徒と1人の先生で授業を行う．この塾の先生は非常に優秀で科目にかかわらずすべての授業を行うことができる．また，先生と生徒は非常にタフなので，出席できる授業には他の授業の出席状況にかかわらず，すべて出席することが可能である．例えば，同じ時間帯の授業に出席できる2人の生徒と4人の先生がいる場合は，その時間帯に2つの授業を行える．

あなたは来月の授業予定を立てなくてはいけないが，先生と生徒の人数が多いため予定を立てるのが非常に大変である．また，あなたはできるだけ多くの授業を行いたいと考えている．そのため，あなたは行える最大の授業数を求めるプログラムを作ることにした．

問題

先生の人数と，生徒の人数，それぞれの先生と生徒の予定がない時間帯，授業を行える時間帯が与えられる．それぞれの先生，または生徒について，予定がない時間帯が授業を行える時間帯を完全に被覆しているとき，その先生，または生徒はその授業に出席できる．それぞれの授業を行える時間帯では，出席できる先生と生徒からなるペアを複数作り，作ったペアの数だけの授業を同時に行うことができる．このときに行える最大の授業数を求めよ．

入力形式

入力データの形式は以下のように与えられる．

授業が行える時間帯の情報
n
先生1の時間帯の情報
...
先生nの時間帯の情報
m
生徒1の時間帯の情報
...
生徒mの時間帯の情報

最初の1行には授業を行える時間帯の情報が与えられる．

続く1行には先生の人数 n (1 ≤ n ≤ 100) が与えられる．続く n 行の i 行目には i 番目の先生の予定がない時間帯の情報が与えられる．

続く1行には生徒の人数 m (1 ≤ m ≤ 100) が与えられる．続く m 行の i 行目には i 番目の生徒の予定がない時間帯の情報が与えられる．

各々の時間帯の情報は次の形式で与えられる．

k ah_1:am_1-bh_1:bm_1 . . . ah_k:am_k-bh_k:bm_k

はじめに時間帯の数 k (1 ≤ k ≤ 100) が与えられ，空白区切りで k 個の時間帯が与えられる．i 番目の時間帯は ah_i:am_i-bh_i:bm_i の形式で与えられ，ah_i:am_i が開始時刻を表し，bh_i:bm_i が終了時刻を表す．ah_i, am_i, bh_i, bm_i はそれぞれ0詰め2桁で 0 ≤ ah_i, bh_i ≤ 23, 0 ≤ am_i, bm_i ≤ 59 を満たす整数である．

与えられるすべての時間帯について，開始時刻は終了時刻より真に早い．また，それぞれの時間帯の情報において，時間帯は早い時刻順に並んでおり，どの終了時刻も1つ後の時間帯の開始時刻より真に早い．

出力形式

行える授業の最大数を1行で出力せよ．

入力例1

2 10:00-11:30 12:00-13:00
2
1 10:00-15:00
2 09:00-12:00 18:10-18:55
2
2 10:00-13:00 15:30-16:40
3 06:00-08:00 12:00-13:10 15:00-17:00

出力例1

2

1つ目の時間帯と2つ目の時間帯で1つずつ授業を行うことで，2回の授業を行うことができる．

入力例2

2 07:00-08:30 10:00-12:00
3
3 08:30-09:00 11:05-15:05 23:10-23:55
2 09:00-12:00 17:45-18:55
1 08:00-10:00
2
2 07:20-11:00 12:30-17:05
3 07:48-08:51 11:22-16:15 17:02-17:59

出力例2

0

予定がない時間帯で07:00からの授業に間に合う先生と生徒のペアが存在しないので1つ目の時間帯は授業を行うことができない．また，2つ目の時間帯は2人目の先生が出席できるが，生徒は誰も出席できない．よって，2つ目の時間帯も授業を行うことができない．したがって，行える最大の授業数は0である．